基本操作数有非指针类型..但它是一个指针?

nic*_*ole 1 c++ pointers class operand

我正在开发一个处理图形的C++项目.它具有许多与"Node"类和"Edge"类相关的功能.

首先,Edge存储其起始节点及其结束节点的副本; 就像是:

class Edge{
...
private:
  Node m_start, m_end;
...
}
Run Code Online (Sandbox Code Playgroud)

为了使某些图形修改函数更有效,我决定使Edge类存储指向开始和结束节点的指针:

class Edge{
  ...
  private:
    Node* m_start, m_end;
  ...
}
Run Code Online (Sandbox Code Playgroud)

因此,我在cpp文件/相关函数中进行了调整,以确保正确访问(例如,将.s 更改为->s).一个例子是打印功能:

void
Edge::Print(ostream& _os){
  _os << "EdgeID = " << m_id << endl
  << "Connects nodes: " << m_start->GetIndex() << " and " << m_end->GetIndex() << endl;
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试编译时,我得到了这个消息(以及其他类似的更改类似的消息):

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’
Run Code Online (Sandbox Code Playgroud)

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

这里发生了什么?m_start是一个指针,据我所知!在某处任务可能有问题吗?GetIndex()示例中调用的函数如下所示,无论是否出现相同的错误const:

int GetIndex() const { return m_index; }  //in Node.h
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 7

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

Node* m_start, * m_end;
Run Code Online (Sandbox Code Playgroud)

下次,只需支付额外的屏幕行并写下:

Node * m_start;
Node * m_end;
Run Code Online (Sandbox Code Playgroud)

你会帮助每个人.