2016-12-15 4 views
1

私はC++が新しく、ポインタやNULLのようなものについては本当に混乱しています。C++は行列をNULLでリストを初期化します

私が作成したオブジェクトへのポインタリストの2次元配列を設定する必要があります。オブジェクトを作成したときにリストをNULLに設定します。私はそれを実行しようとしたときにエラーが発生しました。私はポインターやNULLを使って何かが間違っていたので、それが正しいかわからない。助けていただければ幸いです。ここ

は私のコードです:

GameFullMatrix.h:

private: 
    std::list<InGame*>** fullMap; 
    int rows,cols; 

GameFullMatrix.cpp:

GameFullMatrix::GameFullMatrix(int _rows, int _cols) 
{ 
    this->fullMap = new std::list<InGame*>*[_rows]; 

    for(int i=0; i<_rows; i++) 
    { 
     this->fullMap[i] = new std::list<InGame*>[_cols]; 
     for(int j=0; j<_cols; j++) 
     { 
      this->fullMap[i][j] = NULL; 
     } 
    } 

this->rows = _rows; 
this->cols = _cols; 
} 

私はコードをビルドしようとすると、私が取得エラー:

'operator ='に一致するものはありません(オペランドタイプは ' td :: list 'と ' long int ')|

ありがとう。

+3

なぜあなたは 'std :: list'へのダブルポインタを持っていますか?動的配列が必要な場合は 'std :: vector'を使います。 – NathanOliver

+1

ここではポインタの必要はありません。代わりに 'fullMap'に' std :: vector'を使うべきです。 –

+1

エラーに関しては、割り当ての必要はありません。新しく作成された 'std :: list'オブジェクトは空になります。 *オブジェクト*でありポインタではないので、単にオブジェクトをNULLに設定することはできません。 –

答えて

1

fullMap[i][j]std::list<InGame*>であり、代入演算子で直接リストにデータを挿入することはできません。あなたがリストにNULLを挿入する必要がある理由あなたができる、

しかし:あなたはfullMap[i][j].push_back(NULL)fullMap[i][j].push_front(NULL)

を使用する必要があります(リストが別のリストに1つのリストの内容をコピーするためにオーバーロードされ、std::list<InGame*> abc= some variable of type std::list<InGame*>が動作するのstdの代入演算子) fullMap[i][j].empty()

関連する問題