我正在尝试更正一段C ++代码。 (它是为此目的而编写的,错误也是如此......)
错误:从
的转换无效'const Book*'
到std::vector<Book*>::value_type {aka Book*}'
[-fpermissive]
在这个方法中
void Bibliography::addBook(const Book *newBook)
{
books.push_back(newBook);
}
向量定义为
std::vector<Book *> books;
现在我的主要问题是,const达到了多远?它是什么意思&#34;这个功能无法修改newBook&#34;或者它是否也使向量中的元素成为常量?
基于这个答案,我是否必须删除const,还是有其他方法来解决这个问题?
答案 0 :(得分:0)
来自评论:
std::vector<const Book *> books;
会好吗?不,这本书是可编辑的
如果要推送到向量中的book
指针保持可变,则需要从参数类型const
中删除addBook
限定符。否则,指针传递的book
对象必须被视为const
。
还有另一种解决方法吗?
我建议使用共享或唯一智能指针的向量代替常规指针向量。这有助于您自动管理内存:
std::vector<std::unique_ptr<Book>> books;
从向量中移除Book
对象时,Unique pointers将释放内存。