我正在处理一个处理图形的C++项目。它具有与“节点”类和“边缘”类有关的许多功能。

首先,边缘存储了其开始节点和结束节点的副本;就像是:

class Edge{
...
private:
  Node m_start, m_end;
...
}

为了使某些图形修改功能更有效,我决定使Edge类存储指向开始和结束节点的指针:
class Edge{
  ...
  private:
    Node* m_start, m_end;
  ...
}

因此,我对cpp文件/相关功能进行了调整,以确保正确访问(例如,将.更改为->)。一个示例是打印功能:
void
Edge::Print(ostream& _os){
  _os << "EdgeID = " << m_id << endl
  << "Connects nodes: " << m_start->GetIndex() << " and " << m_end->GetIndex() << endl;
}

但是,当我尝试编译时,会收到此消息(以及其他地方进行相同类型更改的类似消息):
Models/Edge.cpp: In member function ‘virtual void Edge::Print(std::ostream&) const’:
Models/Edge.cpp:32: error: base operand of ‘->’ has non-pointer type ‘const Node’

[其中上例中以<< "Connects nodes: "开头的行是32]

这里发生了什么?据我所知,m_start是一个指针!某处的作业可能有问题吗?在示例中被调用的GetIndex()函数看起来像这样,无论是否使用const,都会发生相同的错误:
int GetIndex() const { return m_index; }  //in Node.h

最佳答案

你已经用双脚开枪了。它应该是:

Node* m_start, * m_end;

下次,只需支付额外的屏幕行并输入:
Node * m_start;
Node * m_end;

您将为每个人帮个忙。

10-05 22:38
查看更多