为什么我的编译器会显示一些不应该存在的错误?

时间:2016-06-23 22:36:09

标签: c++ mfc visual-studio-2005

我有2个错误让我感到恶心并且有点困惑。

错误#1:

  

错误C2679:二进制' + =' :找不到哪个运算符采用类型' std :: basic_string< _Elem,_Traits,_Ax>'的右手操作数(或者没有可接受的转换)

此错误的代码是:

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

第二个,更奇怪:

错误#2:

  

错误C2440:'初始化' :无法转换为' std :: _ Vector_iterator< _Ty,_Alloc>' to' std :: 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年的不好。我有点厌倦了我不太懂的奇怪错误。任何人都有一个想法如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

第一个很简单:你试图将Micrsosoft的CStringstd::string混合,但他们对彼此一无所知。作为一般规则,您可能想要选择一个并专门使用它(我更喜欢std::string作为规则,但如果您使用的是使用CString的MFC或ATL的其他部分,可能没有多少选择。)

如果你真的无法避免混合它们,你可以使用c_str()来获得CString知道如何使用的C风格字符串:

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

或(首选):

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