gpt4 book ai didi

c++ - 无法将指针添加到类指针 vector 数组

转载 作者:太空宇宙 更新时间:2023-11-04 12:19:14 25 4
gpt4 key购买 nike

我试图在指针对象 vector 中添加一个指向对象的指针。 'message_list' vector 列出了指向抽象类 Message 的指针,该抽象类 Message 要么添加一个新的 Topic 要么 Reply,这两个子类继承了父类(super class) Message。我的问题是当我尝试向 vector 添加新主题或回复时,我在编译时遇到错误

error: no matching function for call to ‘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: note: candidates are: void std::vector<_Tp, _Alloc>::push_back(const _Tp&)
[with _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);

为什么我不能将这个指针添加到我的指针 vector 中?感谢您的帮助!

编辑:这是完整的功能:

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 成员函数,这意味着该函数 promise 不修改 对象,但事实是你想修改对象,因为 message_list 是一个成员类(class)的,你正在向它添加项目。所以 const 在这里是不合适的。只需将其删除并将其设置为:

void Bboard::add_topic();

问题解决了!

多一点解释:

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

关于c++ - 无法将指针添加到类指针 vector 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6000168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com