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

C++:错误:成员访问不完整类型,未使用的参数[ Werror,-WunUpand参数],c++,incomplete-type,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

我有以下代码:

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) {

知道我做错了什么吗?谢谢

正如错误消息所说,a->q和b->q,即的使用要求类型MyNode为。只有远期申报是不够的

以下类型为不完整类型:

已声明但未定义的类类型,例如通过转发声明声明; 及

以下任何上下文都要求T类是完整的:

应用于T类型表达式的类成员访问运算符; 您可以在MyNode定义完成后移动运算符的定义。e、 g

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;
}

正如错误消息所说,a->q和b->q,即的使用要求MyNode类型为。只有远期申报是不够的

以下类型为不完整类型:

已声明但未定义的类类型,例如通过转发声明声明; 及

以下任何上下文都要求T类是完整的:

应用于T类型表达式的类成员访问运算符; 您可以在MyNode定义完成后移动运算符的定义。e、 g

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;
}

请注意,您的比较器作为compa是不正确的,a应该为false->returna->qq;请注意,您的比较器作为compa是不正确的,a应该为false->returna->qq;