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



我有以下代码:

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->qb->q,即使用类成员访问运算符需要类型MyNode是完整的类型。仅前向声明是不够的。

以下类型是不完整的类型

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

以下任何上下文都需要完成类 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;
}

最新更新