Book* listOfBooks;
void Mang::addBookToList(Book b3)
{
Book* temp;
temp=listOfBooks;
lobsize++;
listOfBooks=new Book[lobsize];
int i;
for(;i<lobsize;i++)
{
listOfBooks[i]=temp[i];
}
listOfBooks[i]=b3;
}
问题是当我试图向它发送它没有考虑它的子类
我试图使用模板,所以该功能将能够采取任何类,但它没有帮助
错误的原因是:
没有合适的用户定义从lerningbook到book exsists的转换
猜测我需要实现相同类型的功能,这将允许我这样做,但我不知道哪一个
希望你们中的一个可以帮我解决这个问题:)
(我知道我错过了关于临时数组的删除[]这种问题的问题)
答案 0 :(得分:1)
b3
是Book
,但listoOfBooks
是Book*
的数组。您需要将Book*
传递给addBookToList
,不仅仅是为了分配而是为了避免object slicing。
如果这不是学习练习,请改用std::vector<Book*>
或std::vector<std::shared_ptr<Book>>
。 std::vector
将根据需要动态增长,当delete
被销毁时,使用智能指针会自动vector
元素。
如果您选择使用Book*
,请确保遵守What is The Rule of Three?。这可能只是通过声明复制构造函数和赋值运算符Mang
使private
不可复制。
请注意,i
循环中for
未初始化,而i == lobsize
之后,for
以下分配对数组的界限访问权限为listOfBooks[i]=b3;
:
lobsize - 1
数组索引从0开始,因此{{1}}是最后一个元素的索引。