【问题标题】:Base operand has non-pointer type..but it is a pointer?基操作数具有非指针类型..但它是指针?
【发布时间】:2013-10-07 16:18:51
【问题描述】:

我正在开发一个处理图形的 C++ 项目。它有很多与“Node”类和“Edge”类相关的功能。

首先,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 是上例中以 &lt;&lt; "Connects nodes: " 开头的行]

这里发生了什么? m_start 是一个指针,据我所知!某处的分配可能有问题吗?示例中调用的GetIndex() 函数看起来像这样,不管有没有const,都会出现同样的错误:

int GetIndex() const { return m_index; }  //in Node.h

【问题讨论】:

    标签: c++ class pointers operand


    【解决方案1】:

    你双脚都开枪了。应该是:

    Node* m_start, * m_end;
    

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

    Node * m_start;
    Node * m_end;
    

    你会帮助每个人的。

    【讨论】:

      【解决方案2】:
      Node* m_start, m_end;
      

      这将m_start 声明为Node*,但将m_end 声明为Node。使它们成为两个指针的代码如下所示:

      Node* m_start, *m_end;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-09
        相关资源
        最近更新 更多