我正在尝试在指针对象向量中添加指向对象的指针。 'message_list'向量列出了一个指向抽象类Message的指针,该消息要么添加一个新的Topic,要么是两个继承超类Message的子类。 我的问题是当我尝试添加新的主题或回复向量时,我在编译时遇到错误
错误:没有匹配函数来调用
‘std::vector<Message*, std::allocator<Message*> >::push_back(Topic*&) const’
/usr/lib/gcc/x86_64-redhat-linux/4.1.2 /../../../../ include / c ++ / 4.1.2 / bits / stl_vector.h:602:注意:候选人是:
void std::vector<_Tp, _Alloc>::push_back(const _Tp&)
[使用_Tp
=Message*
,_Alloc
=std::allocator<Message*>
]<near match>
错误与messag_list.push_back(msg)
:
Message* msg = new Topic( current_user->get_username(), subject, body, (message_list.size()+1) );
message_list.push_back(msg);
为什么我不能将此指针添加到指针向量中? 谢谢你的帮助!
编辑: 这是完整的功能:
void Bboard::add_topic() const
{
string subject;
cout << "Enter Subject: ";
cin >> subject;
string body;
cout << "Enter Body: ";
cin >> body;
Message* msg = new Topic( current_user->get_username(), subject, body, (message_list.size()+1) );
message_list.push_back(msg);
cout << endl;
cout << "Message Recorded!" << endl;
cout << endl;
}
答案 0 :(得分:1)
void Bboard::add_topic() const
它是一个const成员函数,这意味着这个函数承诺不会修改对象,但事实是你要修改对象,因为message_list
是该类的成员而你正在添加项目。所以const
在这里不合适。只需删除它并将其设为:
void Bboard::add_topic();
问题解决了!
再解释一下:
在const成员函数中,除非使用关键字mutable
声明,否则该类的每个成员都变为const,因此在const成员函数中,message_list
是const对象,所以当你想要对此对象调用push_back
,编译器会生成错误,因为push_back
函数只能在非const对象上调用。