void encodeFunc (char ch, vector<string>& keyAlpha);
int main(){
ch = msgContent.at(i);
encodeFunc(ch, keyAlpha);
}
void endcodeFunc (char ch, vector<string>& keyAlpha){
typedef vector<string> keyCheck;
typedef keyCheck::const_iterator keyIterator;
keyIterator q = find(keyAlpha.begin(), keyAlpha.end(), ch);
int element = distance(keyAlpha.begin(), q);
cout << keyAlpha.at(element+1);
}
我有上面的代码位来在向量中找到给定的char
,然后在向量中显示下一个元素。但是,在尝试搜索由ch
语句填充的ch = msgContent.at(i);
时,我收到错误[Error] no matching function for call to 'distance(std::vector<std::basic_string<char> >::iterator, keyIterator&)'
这是一个我没有接受的指针问题,还是还有其他问题?
答案 0 :(得分:2)
您的typedef&#39; d keyIterator
是vector<string>::const_iterator
。问题是keyAlpha.begin()
会返回vector<string>::iterator
,因此您将两种不同的类型传递给std::distance
,这会导致模板类型扣除失败。
你可能想要:
int element = distance(keyAlpha.cbegin(), q);
cbegin()
会返回const_iterator
。
作为旁注,更简单的方法是:
void endcodeFunc(const string& ch, const vector<string>& keyAlpha)
{
auto it = find(keyAlpha.cbegin(), keyAlpha.cend(), ch);
if (it != keyAlpha.cend() && (it + 1) != keyAlpha.cend())
cout << *(it + 1);
}