ambiguous template parameter?!?!
-
Hallo an alle.
Ich habe hier ein kleines Problemchen. Villeicht kenn ja jemand die Lösung, um den Fehler "ambiguous template parameter" zu vermeiden.
Die Fehlermeldung unter .NET lautet:c:\Dokumente und Einstellungen\dima\Eigene Dateien\Visual Studio Projects\SignedEnergyDataParser\Tester\StringTokenizer2.cpp(24): error C2782: '_InIt std::find_if(_InIt,_InIt,_Pr)' : template parameter '_InIt' is ambiguous
Der Quellcode lautet (zumindest ein Ausschnitt wo der Fehler auftaucht):
[cpp]
void CStringTokenizer::ParseString(const Delimer& rDelim) {
//First clear the results vector
std::string::const_iterator it = m_rStr.begin();
std::string::const_iterator itTokenEnd = m_rStr.begin();
//Eat seperators
while(it != m_rStr.end()) {
if(rDelim(*it)) it++;
//Find next token
itTokenEnd = find_if(it, m_rStr.end(), rDelim);
//Append token to result
if(it < itTokenEnd) push_back(std::string(it, itTokenEnd));
it = itTokenEnd;
}
}
[/cpp]
der Fettmarkierte Teil bereitet mir Probleme.
Falls jemand mir helfen könnte, wäre ich sehr dankbar.
Danke in Voraus
-
Probiers mal so:
void CStringTokenizer::ParseString(const Delimer& rDelim) { //First clear the results vector std::string::const_iterator it = m_rStr.begin(); std::string::const_iterator itTokenEnd = m_rStr.begin(); //Eat seperators while(it != itTokenEnd) { if(rDelim(*it)) it++; //Find next token itTokenEnd = find_if(it, itTokenEnd, rDelim); //Append token to result if(it < itTokenEnd) push_back(std::string(it, itTokenEnd)); it = itTokenEnd; } }
-
Gib die template-Parameter von Hand mit:
itTokenEnd = find_if<typeof(it), typeof(rDelim)>(it, m_rStr.end(), rDelim);
Das Problem ist, dass er sich sonst nicht entscheiden kann, ob er mit std::string::iterator oder std::string::const_iterator konkretisieren soll.
-
typeof? Wusste gar nicht, dass das schon Standard ist.
-
alternativ kannst du auch dies nehmen:
std::string::const_iterator itStrEnd = m_rStr.end(); // ... itTokenEnd = find_if(it, itStrEnd, rDelim);
p.s. Bist du sicher dass dein Delimer kein Delimiter ist?
-
ich danke euch vielmals. Es funktioniert:)
-
finix schrieb:
alternativ kannst du auch dies nehmen:
std::string::const_iterator itStrEnd = m_rStr.end(); // ... itTokenEnd = find_if(it, itStrEnd, rDelim);
Oder einfach:
itTokenEnd = find_if(it, const_cast<const string&>(m_rStr).end(), rDelim);