2016-06-23 7 views
-6

У меня есть 2 ошибки, которые заставляют меня болеть и немного смущать.Почему мой компилятор показывает некоторые ошибки, которых не должно существовать?

Ошибка № 1:

ошибка C2679: бинарный '+ =': ни один оператор не найден, который принимает правый операнд типа 'зЬй :: basic_string < _Elem, _Traits, _Ax>' (или нет никакого приемлемого преобразования)

Код для этой ошибки:

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

И второй один, более странно:

Ошибка № 2:

ошибка C2440: 'инициализации': не удается преобразовать из 'станд :: _ Vector_iterator < _Ty, _Alloc>' на 'станд :: basic_string < _Elem, _Traits, _Ax>'

И эта ошибка у меня есть 7 раз, написанные на этот код:

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);     
} 

Скажи это мой плохой или визуала 2005 плохо. Я немного устал от странных ошибок, которые я действительно не понимаю. У кого-нибудь есть идея, как это исправить?

+3

«мой плохой или визуальный 2005 год» -> 99,98% времени, это ошибка кодера. (возможно, 99,0% с [VS 2005] (http://stackoverflow.com/questions/38003015/why-my-compiler-is-showing-some-errors-that-shouldnt-exist#comment63450118_38003015)) – chux

+1

Во-первых, не используйте Visual Studio 2005. Его действительно старая и массовая багги по сравнению с более новыми версиями. Издание сообщества VS2015 - это бесплатная загрузка. –

+1

'(vector.begin() + i);' даст вам итератор, что вам придется разыгрывать то, что внутри. Предположительно, 'std :: string' – user4581301

ответ

5

Первое довольно просто: вы пытаетесь смешивать CString Micrsosoft с std::string, но они ничего не знают друг о друге. Как правило, вы, вероятно, захотите выбрать один и использовать его исключительно (я бы предпочел std::string, как правило, но если вы используете другие части MFC или ATL, которые используют CString, у вас может не быть большого выбора).

Если вы действительно не можете избежать их смешивания, вы могли бы использовать c_str(), чтобы получить строку C-стиля, который CString знает, как использовать:

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

Or (предпочтительный):

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

Во-вторых, похоже, что вам не удалось разыграть итератор, где вам нужно, но поскольку вы не указываете на определенную часть кода, генерирующего ошибку, немного сложно сказать больше с уверенностью. Вероятно, в этих строках:

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

Вторая строка - строка 'std :: string komunikat1 = vector2.begin() + (licznik_komunikatow);' –

+0

Если это помогает, вот целый код: http://pastebin.com/ZFxSKQbT –

+0

@AnthonyMartial: Как и ошибка говорит, что вы не можете назначить 'std :: vector :: iterator'' std :: string', но это то, что вы пытаетесь сделать код (во многих местах). Ваш 'vector' содержит элементы' std :: string', поэтому просто разыщите итератор: 'std :: string komunikat1 = * (vector2.begin() + (licznik_komunikatow));' или прекратить использование итераторов и просто использовать ' vector' '' [] ', так как вы все равно используете индексы:' std :: string komunikat1 = vector2 [licznik_komunikatow]; ' –