新的操作员帮助,类型分配器和其他错误


class Student
{
    Book* m_book[8];
public:
    Student()
    {
        for ( int i = 0; i < 8; i++){
            m_book[i] = NULL;
        }
    }
    ~Student()
    {
        for ( int j = 0; j < 8; j++){
            delete m_book[j];
        }
    }
    void addBook(Book& book)
    {
        int k = 0;
        while(m_book[k] != NULL){
            k++;
        }
            Book book = new m_book[k];
    }
};

为什么addBook成员函数不起作用?

Book book = new m_book[k];

有很多错误
  • 您正在尝试将pointer to type分配给一本书,这是无效的
  • 您在value m_book [k]上使用 operator new,而不是类型

您还拥有一系列书籍指针,并带有所有权语义。您不需要指针,您可以直接拥有一系列书籍。

一个简化的学生:

class Student 
{
    std::array<Book, 8> m_books;
    size_t count = 0;
public:
    void addBook(const Book & book)
    {
        m_book[count] = book;
        ++count;
    }
}

没有指针,默认构造函数,默认驱动器

   Book book = new m_book[k]; 

应该是

   m_book[k]=new Book(book);         

最新更新