c ++:错误:成员访问不完整的类型,未使用的参数[-Werror,-Wunused-parameter]

时间:2018-12-25 07:32:24

标签: c++ incomplete-type

我有以下代码:

class MyNode;

class MyCompare {
  public:
    bool operator()(MyNode *a, MyNode *b) {
        return a->q <= b->q ? true : false;
    }
};

class MyNode {

  public:

    double sum;    
    double q;

    StateNode *parent;
    std::priority_queue<MyNode, std::vector<MyNode>, MyCompare> children;
};

但是出现以下编译错误:

error: member access into incomplete type 'MyNode'
        return a->q <= b->q ? true : false;
                ^
..MyNode.h:35:7: note: forward declaration of 'MyNode'
class MyNode;
      ^
..MyNode.h:39:46: error: unused parameter 'b' [-Werror,-Wunused-parameter]
    bool operator()(MyNode *a, MyNode *b) {

知道我在这里做错了什么吗?谢谢!

1 个答案:

答案 0 :(得分:3)

如错误消息所述,a->qb->q,即class member access operator的使用要求类型MyNodecomplete type。仅向前声明是不够的。

  

以下类型是不完整类型

     
      已声明(例如通过前向声明)但未定义的
  • 类类型;
  •   

  

以下任何情况都需要T类是完整的:

     
      
  • 类成员访问运算符应用于类型T的表达式;
  •   

您可以在operator()定义之后移动MyNode的定义,此时MyNode完成。例如

class MyNode;

class MyCompare {
  public:
    bool operator()(const MyNode *a, const MyNode *b) const;
};

class MyNode {

  public:

    double sum;    
    double q;

    StateNode *parent;
    std::priority_queue<MyNode, std::vector<MyNode>, MyCompare> children;
};

bool MyCompare::operator()(const MyNode *a, const MyNode *b) const {
    return a->q < b->q;
}