“请求非类型的成员”,作业声明不正确?

时间:2012-04-01 16:59:24

标签: c++ templates pointers

我正在尝试遍历名为_snakeSegments的列表中每个节点中包含的数据。 (注意:课程由我自己编写,不属于STL等)。每个数据元素都是一个Sprite,代表我的蛇的一个部分。

当我尝试编译时,我收到以下错误:request for member 'GetPrev' in 'currentNode', which is of non-class type 'Node<Sprite>*'。已编译的标记了我尝试在下面的for循环中分配下一个currentNode的行:

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 个答案:

答案 0 :(得分:4)

currentNode是一个指针,这意味着您需要通过` - &gt;访问其属性,就像您在上面的行中所做的那样:

currentNode->GetPrev()

您应该尝试学习区分指针和实例。指针属性始终通过->引用。

答案 1 :(得分:4)

如果currentNode是指针,那么您使用->而不是.访问成员函数,就像对成员变量一样。

答案 2 :(得分:2)

CurrentNode是一个指针,尝试使用->

currentNode = currentNode->GetPrev();