1

我有一本课本和 2 个子类 lerningbook,readingbook,我正在尝试创建一个书籍列表 book* listofbooks 并将子类添加到它

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 的合适的用户定义转换
猜测我需要实现相同类型的函数来允许我执行此操作,但我不知道你们中的哪一个可以帮助我解决 adv 中的 thx :)
(我知道我缺少临时数组排序上的 delete[]的被困在这个问题上)

4

1 回答 1

1

b3Book, 但listoOfBooks是 的数组Book*。您需要传递一个Book*to addBookToList,不仅是为了分配,而且是为了避免对象切片

如果这不是学习练习,请改用 astd::vector<Book*>或 a std::vector<std::shared_ptr<Book>>。将根据需要动态增长,并且智能指针的使用将在销毁时std::vector自动delete元素。vector

如果您选择使用Book*确保您遵守什么是三法则?. 这可能只是Mang通过声明复制构造函数和赋值运算符来使不可复制private

请注意,i在循环中未初始化,for并且以下分配超出了数组的范围访问权限,如下i == lobsize所示for

listOfBooks[i]=b3;

数组索引从 0 开始,lobsize - 1最后一个元素的索引也是如此。

于 2012-06-26T21:55:49.480 回答