我正在开发一个处理图形的C ++项目。它具有许多与“Node”类和“Edge”类相关的功能。
首先,Edge存储其起始节点及其结束节点的副本;类似的东西:
class Edge{
...
private:
Node m_start, m_end;
...
}
为了使某些图形修改函数更有效,我决定让Edge类存储指向开始和结束节点的指针:
class Edge{
...
private:
Node* m_start, m_end;
...
}
因此,我对cpp文件/相关功能进行了调整,以确保正确访问(例如,将.
更改为->
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
答案 0 :(得分:7)
你已经双脚开枪了。它应该是:
Node* m_start, * m_end;
下次,只需支付额外的屏幕行并写下:
Node * m_start;
Node * m_end;
你会帮助每个人。
答案 1 :(得分:3)
Node* m_start, m_end;
这会将m_start
声明为Node*
,但会将m_end
声明为Node
。使它们成为指针的代码看起来像这样:
Node* m_start, *m_end;