2016-12-15 1 views
1

Я новичок в C++, и я действительно запутался в таких вещах, как указатели и NULL.C++ инициализирует списки как NULL в матрице

Мне нужно установить 2d-массив списков указателей на объект, который я создал. Я хочу, чтобы списки устанавливались в 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

Я не вижу здесь никаких указателей. Вместо этого вы должны использовать 'std :: vector' для' fullMap'. –

+1

Что касается ошибок, нет необходимости в задании. Новый объект 'std :: list' будет пустым. Это также * объект *, а не указатель, и поэтому вы просто не можете попытаться установить объект в 'NULL'. –

ответ

1

fullMap[i][j] имеет тип std::list<InGame*> Вы не можете напрямую вставлять данные в список по оператору присваивания. вам нужно использовать fullMap[i][j].push_back(NULL) или fullMap[i][j].push_front(NULL)

(оператор присваивания в станде: список перегружен, чтобы скопировать содержимое одного списка в другой список, std::list<InGame*> abc= some variable of type std::list<InGame*> будет работать)

Но почему вам нужно вставить NULL в список, вы можете всегда проверяйте, не пуст ли список fullMap[i][j].empty()