2016-12-09 3 views
0
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メンバ関数が動作しませんか?new演算子のヘルプ、型指定子およびその他のエラー

+0

それは(種類の)「作業」が、一見ではない、あなたが期待するようです。あなたは実際に何を期待していますか?これを質問に追加してください。あなたも何を観察していますか?ありがとう:) – Wolf

+0

それはm_book [k] =新しい本でなければなりません。 btw配列の代わりにstd :: vectorを使用してconaiderする必要があります。 –

+1

@DanielKovachevを閉じると投票したところ、あなたはそれがちょうど8回働いていることを示唆しています。 'std :: vector'は確かにここで最善の解決策です。 – Wolf

答えて

0
Book book = new m_book[k]; 

でなければなりません

m_book[k]=new Book(book);   
+1

彼は彼が彼の機能で受け取った本を追加するのを忘れます。本* newbook =新しい本(本); –

+0

私は答えの最初の行がこの恐ろしいNonC++行を繰り返すべきではないと思います。いくつかの入門語によって間違っていることを明確にすること。 – Wolf

+0

私はその本をいつでも削除できるので、いいイディーだとは思わない。私はあなたがポインタの配列を保持しているbeacuseをコンパイルすることができないことをかなり確信しています。人々は、そのCのようなcppを使用して、その本当に悲しい –

1

ラインと間違って多くのものがあります。あなたがいる

  • 無効であるブックにpointer to typeを割り当てるしようとしているBook book = new m_book[k];

    • 値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; 
        } 
    } 
    

    ありませんポインタ、デフォルトコンストラクタ、デフォルトのデストラクタ

  • +0

    * 'No pointers' *は学生が本のみを使用していて、深いコピーをしていないと悪い考えかもしれません...学生が最近好きなものは分かりません;ブックブック=新しいm_book [k]; 'が間違っている(Spreedshirtには良いかもしれないが) – Wolf

    関連する問題