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 data eine 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 😉


Anmelden zum Antworten