我很难弄清楚为什么不编译。这只是基本的类声明,省略了构造函数/析构函数和其他函数。在其他地方也可以正确定义消息。
#include <vector>
#include <map>
using namespace std;
class SmartCarrier {
map<string, vector <Message *>> accounts_map;
void SearchMessage() const;
};
当我尝试用m_iter = accounts_map.find(account)
分配m_iter时,出现错误,没有运算符“ =”与这些操作数匹配。我仔细检查以确保地图迭代器与实际地图的类型相同。我不确定什么不正确。
void SmartCarrier::SearchMessage() const {
string account;
map<string, vector<Message *>>::iterator m_iter;
cout << "Enter an account: ";
cin >> account;
try {
m_iter = accounts_map.find(account);
if (m_iter != accounts_map.end) {
//code to display account information
} else {
throw 'e';
}
} catch (char e) {
cout << "Error: Account not found\n";
}
}
答案 0 :(得分:2)
SearchMessage()
被声明为const
,因此它的this
参数指向一个const SmartCarrier
对象,因此它的accounts_map
成员也是{{1} }。在const
上调用find()
时,它将返回const map
而不是const_iterator
。
此外,iterator
必须改为accounts_map.end
。
此外,使用异常会浪费您可以(而且应该)摆脱的开销。
尝试一下:
accounts_map.end()
如果您使用的是C ++ 11或更高版本,请考虑显式使用void SmartCarrier::SearchMessage() const {
string account;
cout << "Enter an account: ";
cin >> account;
map<string, vector<Message *>>::const_iterator m_iter = accounts_map.find(account);
if (m_iter != accounts_map.end()) {
//code to display account information
} else {
cout << "Error: Account not found\n";
}
}
而不是auto
,这也可以解决以下错误:
const_iterator