无法将指针添加到类指针向量数组

Cannot add pointer to array of class pointers vector

本文关键字:指针 向量 数组 添加      更新时间:2023-10-16

我正在尝试在指针对象向量中添加指向对象的指针。"message_list"向量列出了指向抽象类 Message 的指针,该抽象类 Message 要么添加新的主题,要么回复,这两个子类继承了超类 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;
}
void Bboard::add_topic() const

它是一个 const 成员函数,这意味着此函数承诺不修改对象,但事实是您想要修改对象,因为message_list是类的成员并且您正在向其添加项目。所以const在这里是不合适的。只需将其删除并使其成为:

void Bboard::add_topic();

问题解决了!

多一点解释:

在 const 成员函数中,

类的每个成员都变为 const,除非它使用关键字 mutable 声明,因此在您的 const 成员函数中,message_list 是 const 对象,因此当您想在此对象上调用 push_back 时,编译器会生成错误,因为push_back函数只能在非 const 对象上调用。