2017-02-03 66 views
0
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&)'搜索的矢量,則在矢量

這是,我不是撿的指針問題,或有更多的東西?

+1

向量的typedef :: 爲const_iterator keyIterator;或者簡單地使用C++ 11 auto q = find(keyAlpha.begin(),keyAlpha.end(),ch); – user1438832

+0

keyAlpha是一個字符串的向量,因此您不能使用find來查找字符。 – user1438832

+0

第一個建議給出了同樣的錯誤; 第二個建議給出了一個不同的錯誤:'[錯誤]'q'沒有命名一個類型' 我以前從未使用'auto',是否有另一個庫需要使用它? – greatj0b

回答

2

你有型號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); 
} 
+0

keyAlpha是字符串的向量,因此ypu無法使用find來查找字符。 – user1438832

+0

@ user1438832,已修復。 –