我尝试在字符串类型下进行字符比较, 使用以下代码:
vector <int> getQuality(string seedTag, vector <string> &MuTag) {
vector <int> Quals;
for (unsigned i = 0; i<MuTag.size(); i++) {
Quals.push_back(-40);
cout << MuTag[i] << " " << seedTag[i] << endl;
if (MuTag[i] == seedTag[i]) { // This line 33 with error
Quals.push_back(40);
}
}
return Quals;
}
但为什么会出现这样的错误:
Mycode.cc:33: error: no match for 'operator==' in '(+ MuTag)->std::vector<_Tp, _Alloc>::operator[] [with _Tp = std::string, _Alloc = std::allocator<std::string>](((long unsigned int)i)) == seedTag. std::basic_string<_CharT, _Traits, _Alloc>::operator[] [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](((long unsigned int)i)
我该如何解决?
答案 0 :(得分:7)
您正在尝试将字符串(MuTag [i])与char(seedTag [i])进行比较。
答案 1 :(得分:4)
正如亚历山大所说,你正在比较一个字符串和一个字符。
令人遗憾的是,编译器已经告诉过你,只有它用ISO-STL-TEMPLATE加密加密,这更难以读取perl!
您可能需要查看this script来解密C ++ STL错误消息。
答案 2 :(得分:2)
我知道很多其他人对导致编译错误的原因做出了回应,所以让我回顾一下然后提出一个解决方案:
seedTag是一个字符串,根据定义,它是一个有序的字符集合。 MuTag被定义为字符串向量:一个有序的字符串集合。
进行比较时:
MuTag[i] == seedTag[i]
正如其他人所说,你不是在比较同一类型。
要修复它:
从外观上看,你想要将MuTag中的每个值与seedTag进行比较。如果确实如此,只需摆脱“seedTag [i]”中的[i]。
答案 3 :(得分:1)
vector <string> & MuTag
是字符串的集合,而
string seedTag
是字符集。所以在比较中
MuTag[i] == seedTag[i]
你实际上在比较像这样的东西
"aaaaa" == 'a'
这绝对不正确。