jokey2
Erfahrenes Mitglied
Hallo Gemenide!
Ich habe hier ein Problem mit einem Funktionstemplate. Folgendes Template läßt sich problemlos kompilieren:
Folgendes aber nicht:
Hier sind die (ersten) Fehlermeldungen:
Ich würde lieber einen iterator (oder sogar const_iterator) als einen Zeiger zurückgeben.
Kann mir jemand den Grund für die Fehlermeldungen nennen und wie ich es schaffen kann einen std::list<...>::iterator aus der Templatefunktion zurückzugeben?
Ich habe hier ein Problem mit einem Funktionstemplate. Folgendes Template läßt sich problemlos kompilieren:
Code:
template<typename T_ListElement>
T_ListElement * // Rückgabewert: Zeiger auf T_ListElement
FindInList
(const std::list<T_ListElement> &searchlist,
const T_ListElement &Element)
{
std::list<T_ListElement>::iterator it = searchlist.begin();
while(it != searchlist.end())
{
if(Element == (*it)) break;
it++;
}
return it != searchlist.end() ? &(*it) : NULL;
};
Code:
template<typename T_ListElement>
std::list<T_ListElement>::iterator // Rückgabewert: iterator auf das Listenelement
FindInList
(const std::list<T_ListElement> &searchlist,
const T_ListElement &Element)
{
std::list<T_ListElement>::iterator it = searchlist.begin();
while(it != searchlist.end())
{
if(Element == (*it)) break;
it++;
}
return it;
};
Die Fehlermeldungen beziehen sich alle auf den Funktionskopf. Wie man sehen kann, arbeite ich mit VC.NET 2003.c:\Projekte\...\globals.h(66) : warning C4346: 'std::list<_Ty>::iterator': Abhängiger Name ist kein Typ
Präfix mit 'typename' zum Angeben eines Typs
c:\Projekte\...\globals.h(66) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'FindList'
c:\Projekte\...\globals.h(66) : error C2501: 'std::list<_Ty>::iterator': Fehlende Speicherklasse oder Typspezifizierer
c:\Projekte\...\globals.h(66) : error C2065: 'T_ListElement': nichtdeklarierter Bezeichner
c:\Projekte\...\globals.h(66) : error C2955: 'std::list': für die Verwendung einer Vorlagenklasse ist eine Vorlagen-Argumentliste erforderlich
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\list(966): Siehe Deklaration von 'std::list'
c:\Projekte\...\globals.h(66) : error C2955: 'std::list': für die Verwendung einer Vorlagenklasse ist eine Vorlagen-Argumentliste erforderlich
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\list(966): Siehe Deklaration von 'std::list'
c:\Projekte\...\globals.h(67) : error C2143: Syntaxfehler: Es fehlt ',' vor '&'
Ich würde lieber einen iterator (oder sogar const_iterator) als einen Zeiger zurückgeben.
Kann mir jemand den Grund für die Fehlermeldungen nennen und wie ich es schaffen kann einen std::list<...>::iterator aus der Templatefunktion zurückzugeben?