将常量指针作为参数传递时出错

error while passing const pointer as parameter

本文关键字:参数传递 出错 常量 指针      更新时间:2023-10-16

我正在尝试更正一段C++代码。(它是为了这个目的而写的,错误也是如此…)

错误:从'const Book*'std::vector<Book*>::value_type {aka Book*}'的转换无效[-fpermission]

在这种方法中

void Bibliography::addBook(const Book *newBook)
{
    books.push_back(newBook);
}

矢量被定义为

std::vector<Book *> books;

现在我的主要问题是,const能达到什么程度?它的意思是"这个函数不能修改newBook",还是使向量中的元素也成为常量?

根据这个答案,我是否必须删除常量,或者有其他方法来解决这个问题?

来自评论:

std::vector<const Book *> books;可以吗?

不,这本书是可编辑的

如果要将指向的指向向量的book指针保持可变,则需要从addBook的参数类型中删除const限定符。否则,指针传递的book对象必须被视为const

有别的办法解决这个问题吗?

我建议使用共享或唯一智能指针的矢量来代替常规指针的矢量。这将帮助您自动管理内存:

std::vector<std::unique_ptr<Book>> books;

从矢量中删除Book对象时,唯一指针将释放内存。