C ++ Указатель на массив перечислений - PullRequest
0 голосов
/ 25 января 2020

У меня проблема с попыткой указать вектор и затем установить значение элемента при попытке отменить ссылку на него.

std::vector < Maze::TILE_CONTENT> * theGrid;
if (go->team == GameObject::GT_BLUE)
    *theGrid = m_myGridBlue;
else
    *theGrid = m_myGridRed;

if (go->curr.y < m_noGrid - 1)
{
    theGrid[next.y * m_noGrid + next.x] = Maze::TILE_EMPTY; //no operate '=' matches these operands
}

1 Ответ

3 голосов
/ 25 января 2020

Здесь есть две проблемы. Первый в назначении *theGrid. Этот код скопирует исходный вектор во все, на что указывает theGrid. Так как этот указатель неинициализирован, у вас есть Неопределенное Поведение, cra * sh, если вам повезет. Я думаю, что вы пытаетесь сделать:

theGrid = &m_myGridBlue;

Вторая проблема, которая приводит к ошибке вашего компилятора, заключается в том, как вы получаете доступ к указанному вектору. Поскольку theGrid является указателем на вектор, вам необходимо сначала разыменовать этот указатель:

(*theGrid)[next.y * m_noGrid + next.x] = ...;

В качестве альтернативы указателю вы можете использовать ссылку

std::vector<Maze::TILE_CONTENT> &theGrid = go->team == GameObject::GT_BLUE ? m_myGridBlue : m_myGridRed;

, а затем вы можете получить доступ к содержимому theGrid, как вы уже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...