«Запрос на член, не относящийся к классу», оператор присваивания неверен? - PullRequest
2 голосов
/ 01 апреля 2012

Я пытаюсь перебрать данные, содержащиеся в каждом узле, в списке с именем _snakeSegments. (примечание: занятия были написаны мной и не являются частью STL). Каждый элемент данных - это спрайт, представляющий один сегмент моей змеи.

Я получаю следующую ошибку при попытке компиляции: request for member 'GetPrev' in 'currentNode', which is of non-class type 'Node<Sprite>*'. Скомпилированный пометил строку, где я пытаюсь назначить следующий currentNode в цикле for ниже:

void Snake::Draw(prg::Canvas& c)
{
   Node<Sprite>* currentNode = _snakeSegments.GetHead();
   for (int i=0; i < _snakeSegments.NumberOfNodes(); ++i){
      currentNode->GetData().Draw(c);
      currentNode = currentNode.GetPrev(); //compiler shows error here
   }
}

Вот определение GetPrev. Который при вызове узла возвращает указатель узла на предыдущий узел ..

template <typename NodeType>
Node<NodeType>* Node<NodeType>::GetPrev()
{
   return _prev;
}

Ну, я немного запутался и был бы признателен за любую помощь! Пожалуйста, спросите, если вам нужна дополнительная информация / мне неясно, спасибо.

Ответы [ 3 ]

4 голосов
/ 01 апреля 2012

Если currentNode - указатель, то вы получаете доступ к функциям-членам с помощью -> вместо ., так же, как вы делаете для переменных-членов.

4 голосов
/ 01 апреля 2012

currentNode - указатель, что означает, что вам нужно получить доступ к его атрибутам через `->, как вы делали в строке выше:

currentNode->GetPrev()

Вы должны действительно попытаться научиться различать указатели и экземпляры. Атрибуты указателя всегда указываются через ->.

2 голосов
/ 01 апреля 2012

CurrentNode - это указатель, попробуйте с ->:

currentNode = currentNode->GetPrev();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...