无法添加指向类指针向量数组的指针

时间:2011-05-14 06:20:32

标签: c++ pointers object vector

我正在尝试在指针对象向量中添加指向对象的指针。 '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;
}

1 个答案:

答案 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对象上调用。