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->q