Compilerfehler, bin verwirrt
-
Warum will der Compiler das hier nicht?

void sendData(const std::string& data) { int amountToTransmit = data.size(); std::string::iterator dataIterator = data.begin(); ....Das kommt als Fehlermeldung, finde diese Templatefehler immer so herrlich kryptisch:
1>C:\SourceCode\MyClasses\Navigator\Navigator/Internet/Internet.hpp(69) : error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::_String_const_iterator<_Elem,_Traits,_Alloc>' akzeptiert (oder keine geeignete Konvertierung möglich)
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Alloc=std::allocator<char>
1> ]
1> C:\Programme\Microsoft Visual Studio 9.0\VC\include\xstring(435): kann 'std::_String_iterator<_Elem,_Traits,_Alloc> &std::_String_iterator<_Elem,_Traits,_Alloc>::operator =(const std::_String_iterator<_Elem,_Traits,_Alloc> &)' sein
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Alloc=std::allocator<char>
1> ]
1> bei Anpassung der Argumentliste '(std::_String_iterator<_Elem,_Traits,_Alloc>, std::_String_const_iterator<_Elem,_Traits,_Alloc>)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Alloc=std::allocator<char>
1> ]
-
Da
dataeine konstante Referenz ist, musst du einen const_iterator nehmen!std::string::const_iterator dataIterator = data.begin();
-
damit du sie das nächste mal verstehst:
als erstes kann man das with [ TYPEN ] mal entfernen, da dort (in diesem fall) immer die gleichen typen aufgelistet sind:
MSVC schrieb:
1>C:\SourceCode\MyClasses\Navigator\Navigator/Internet/Internet.hpp(69) : error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::_String_const_iterator<_Elem,_Traits,_Alloc>' akzeptiert (oder keine geeignete Konvertierung möglich)
1> C:\Programme\Microsoft Visual Studio 9.0\VC\include\xstring(435): kann 'std::_String_iterator<_Elem,_Traits,_Alloc> &std::_String_iterator<_Elem,_Traits,_Alloc>::operator =(const std::_String_iterator<_Elem,_Traits,_Alloc> &)' sein
1> bei Anpassung der Argumentliste '(std::_String_iterator<_Elem,_Traits,_Alloc>, std::_String_const_iterator<_Elem,_Traits,_Alloc>)'
wenn das noch nicht ausreicht, kann man noch ein bisschen ersetzen:
MSVC schrieb:
1>.../Internet.hpp(69) : error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::string::const_iterator' akzeptiert (oder keine geeignete Konvertierung möglich)
1> C:\Programme\Microsoft Visual Studio 9.0\VC\include\xstring(435): kann 'std::string::iterator &std::string::iterator::operator =(const std::string::iterator &)' sein
1> bei Anpassung der Argumentliste '(std::string::iterator, std::string::const_iterator)'
anders ausgedrückt:
er will auf der rechten seite nen iterator und findet nur nen const_iterator...
das kommt dadurch, weil du auf der linken seite den falschen typen angegeben hast...
(unterschied zw iter und const_iter ist klar, oder?!)bb
-
Ja danke, dummes Problem
