我正在开发一个处理图形的 C++ 项目。它有很多与“节点”类和“边缘”类相关的功能。
起初,Edge 存储了它的起始节点和结束节点的副本;就像是:
class Edge{
...
private:
Node m_start, m_end;
...
}
为了使某些图形修改功能更有效,我决定让 Edge 类存储指向开始和结束节点的指针:
class Edge{
...
private:
Node* m_start, m_end;
...
}
因此,我对 cpp 文件/相关功能进行了调整,以确保正确访问(例如,将.
s 更改为->
s)。一个示例是在打印功能中:
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’
[其中 32 是上面示例中以<< "Connects nodes: "
]开头的行
这里发生了什么?m_start 是一个指针,据我所知!某处的分配可能有问题吗?示例中调用的GetIndex()
函数如下所示,无论是否使用 ,都会发生相同的错误const
:
int GetIndex() const { return m_index; } //in Node.h