【发布时间】:2019-04-10 11:38:42
【问题描述】:
我有这门课:
class Mail {
public:
Mail(const string & msg) : msg(msg) {}
const string msg;
};
还有这个结构,它比较两个 Mail 对象:
struct Compare {
bool operator()(const Mail & mail, Mail const & mail2) const {
return mail.msg < mail2.msg;
}
};
我想要一个包含按邮件const string msg 排序的邮件对象的向量。但是,当我尝试使用 lower_bound 将新对象插入向量中时,出现许多错误,包括:
将 'const 字符串作为 'this' 参数传递会丢弃限定符。
int main() {
vector <Mail> mails;
Mail mail2("1");
mails.push_back(mail2);
const string msg = "2";
Mail mail(msg);
auto low = lower_bound(mails.begin(), mails.end(), mail, Compare());
// mails.push_back(mail); // OK
mails.insert(low, mail); // passing ‘const string as ‘this’ argument discards qualifiers
return 0;
}
我还不太了解const 的用法,无法弄清楚,哪个const 是错误的。
很抱歉,如果已经有人问过这个问题,但我还没有找到这个问题的答案。
【问题讨论】:
-
您确定要将
string msg设为const吗?这意味着它在初始化后无法更改,这就是阻止您插入它的原因。 -
感谢所有的答案,我现在明白这个问题了。但是,我无法更改
class Mail,包括const string msg。我将向量更改为指针向量vector<CMail*>。
标签: c++ vector insert constants lower-bound