2016-06-23 22 views
-6

Ich habe 2 Fehler, die mich krank und ein wenig verwirrt machen.Warum zeigt mein Compiler Fehler an, die nicht existieren sollten?

Fehler # 1:

Fehler C2679: binary '+ =': kein Betreiber gefunden, der einen rechten Operanden vom Typ 'std :: basic_string < _Elem, _Traits, _AX>' nimmt (oder gibt es keine akzeptable Umwandlung)

-Code zu diesem Fehler ist:

CString lancuch1; 
lancuch1 = "Znaleziono "; 
lancuch1 += liczba1.str(); 
lancuch1 += " pozycji."; 

Und die zweite, mehr seltsam:

Fehler # 2:

Fehler C2440: 'initialisieren': Aus 'std :: _ Vector_iterator < _Ty, _Alloc>' nicht konvertieren 'std :: basic_string < _Elem, _Traits, _AX>'

und dieser Fehler i 7 mal an diesem Code geschrieben haben:

for(int i = 0 ; i < pojemnosc_vectora; i++){ 
std::string linijka = (vector.begin()+i); 
char deli = ';'; 
int a = 0; 
for(int i = 0; i<5; i++){ 
std::string pokico = linijka.substr(a, deli); 
vector2.push_back(pokico); 
a+=pokico.length(); 
} 
} 
int licznik_komunikatow=0; 
for(int i=0; i<vector.size(); i++){ 
std::string komunikat1 = vector2.begin()+(licznik_komunikatow); 
std::string komunikat2 = vector2.begin()+(licznik_komunikatow+1); 
std::string komunikat3 = vector2.begin()+(licznik_komunikatow+2); 
std::string komunikat4 = vector2.begin()+(licznik_komunikatow+3); 
std::string komunikat5 = vector2.begin()+(licznik_komunikatow+4); 
CString komun,komun1,komun2,komun3,komun4; 
komun = komunikat1.c_str(); 
komun1 = komunikat2.c_str(); 
komun2 = komunikat3.c_str(); 
komun3 = komunikat4.c_str(); 
komun4 = komunikat5.c_str(); 
printf("Nazwa: %s \n Cena: %s \n Ilość: %s \n Gdzie: %s \n Kod: %s \n ", komun, komun1, komun2, komun3, komun4);     
} 

Sag mir, ist es mein schlechtes oder Visual von 2005 schlecht. Ich bin ein bisschen müde von seltsamen Fehlern, die ich nicht wirklich verstehe. Hat jemand eine Idee, wie man das beheben kann?

+3

"mein schlechtes oder visuelles 2005 schlechtes" -> 99,98% der Zeit, ist es der Fehler des Kodierers. (vielleicht 99,0% mit [VS 2005] (http://stackoverflow.com/questions/38003015/why-my-compiler-is-showing-some-errods-thouldnt-exist#comment63450118_38003015)) – chux

+1

Erstens, nicht verwenden Visual Studio 2005. Es ist wirklich alt und massiv Buggy im Vergleich zu neueren Versionen. VS2015 Community Edition ist ein kostenloser Download. –

+1

'(vector.begin() + i);' gibt Ihnen einen Iterator, den Sie dereferenzieren müssen, um zu erhalten, was drin ist. Vermutlich eine 'std :: string' – user4581301

Antwort

5

Die erste ist ziemlich einfach: Sie versuchen, Micrsosoft CString mit std::string zu mischen, aber sie wissen nichts voneinander. In der Regel möchten Sie wahrscheinlich einen auswählen und ihn exklusiv verwenden (ich bevorzuge std::string als Regel, aber wenn Sie andere Teile von MFC oder ATL verwenden, die CString verwenden, haben Sie möglicherweise nicht viel Auswahl).

Wenn Sie wirklich nicht vermeiden können sie mischen, könnten Sie c_str() verwenden, um eine C-String zu bekommen, dass CString weiß, wie man verwendet:

CString lancuch1; 
lancuch1 = "Znaleziono "; 
lancuch1 += liczba1.str().c_str(); 
lancuch1 += " pozycji."; 

oder (bevorzugt):

std::string lanuch1 = "Znaleziono "s + liczba1.str() + " pozychi."s; 

Zweitens klingt es so, als ob Sie es versäumt haben, einen Iterator zu dereferenzieren, wo Sie es brauchen, aber da Sie nicht auf den spezifischen Teil des Codes zeigen, der den Fehler erzeugt, ist es schwer, mehr mit Sicherheit zu sagen. Wahrscheinlich in diesen Zeilen aber:

std::string komunikat1 = vector2.begin()+(licznik_komunikatow); 
std::string komunikat2 = vector2.begin()+(licznik_komunikatow+1); 
std::string komunikat3 = vector2.begin()+(licznik_komunikatow+2); 
std::string komunikat4 = vector2.begin()+(licznik_komunikatow+3); 
std::string komunikat5 = vector2.begin()+(licznik_komunikatow+4); 
+0

Zweite ist die Zeile 'std :: string komunikat1 = vector2.begin() + (licznik_komunikatow);' –

+0

Wenn es hilft, hier ist der ganze Code: http://pastebin.com/ZFxSKQbT –

+0

@AnthonyMartial: Wie der Fehler sagt, man kann einem 'std :: string' keinen' std :: vector :: iterator' zuweisen, aber genau das versucht der Code (an vielen Stellen). Ihr 'vector' enthält' std :: string' Elemente, so dereferenzieren Sie einfach den Iterator: 'std :: string komunikat1 = * (vector2.begin() + (licznik_komunikatow));', oder stoppen Sie die Verwendung von Iteratoren und verwenden Sie einfach ' vector's '[]' -Operator, da Sie ohnehin Indizes verwenden: 'std :: string komunikat1 = vector2 [licznik_komunikatow];' –