C++ 转发声明和类
我正在处理一种情况,我试图定义两个相互依赖的类。这是我正在尝试做的一个简化示例C++ 转发声明和类,c++,class,forward-declaration,C++,Class,Forward Declaration,我正在处理一种情况,我试图定义两个相互依赖的类。这是我正在尝试做的一个简化示例 class a{ public: int ia; int printb(b in){ return in.ib; } }; class b{ public: int ib; int printb(a in){ return in.ia; } }; 这给了我未定义的b类错误。我试过了 class b; class a{ public:
class a{
public:
int ia;
int printb(b in){
return in.ib;
}
};
class b{
public:
int ib;
int printb(a in){
return in.ia;
}
};
这给了我未定义的b类错误。我试过了
class b;
class a{
public:
int ia;
int printb(b in){
return in.ib;
}
};
class b{
public:
int ib;
int printb(a in){
return in.ia;
}
};
但这并不能解决问题。有什么想法吗?您所要做的就是将成员函数的实现保持在类定义之外。然后,您可以确保在实现成员之前定义了这两个类:
class b;
class a{
public:
int printb(b in);
int ia;
};
class b{
public:
int ib;
int printb(a in);
};
int a::printb(b in){
return in.ib;
}
int b::printb(a in){
return in.ia;
}
您所要做的就是将成员函数的实现保持在类定义之外。然后,您可以确保在实现成员之前定义了这两个类:
class b;
class a{
public:
int printb(b in);
int ia;
};
class b{
public:
int ib;
int printb(a in);
};
int a::printb(b in){
return in.ib;
}
int b::printb(a in){
return in.ia;
}
想想看:编译器应该如何知道
在.ib中返回什么代码>表示不知道b
的定义?在定义a::printb
之前,必须先定义b
。因此,只需在类中声明子例程,然后在以后定义它们?是的。这可能是个骗局,但我也不知道如何搜索/我相信它叫。一般来说,它只是意味着程序设计中的一个缺陷。@BaummitAugen没有看到公共声明思考一下:编译器如何知道在.ib中返回什么代码>表示不知道b
的定义?在定义a::printb
之前,必须先定义b
。因此,只需在类中声明子例程,然后在以后定义它们?是的。这可能是个骗局,但我也不知道如何搜索/我相信它叫。一般来说,这只意味着程序设计中存在缺陷。@BaummitAugen没有看到公共声明。两个成员函数可能应该标记为inline
,以与原始代码一致。如果这实际上是一个头文件,也有必要。两个成员函数可能应该标记为inline
,以与原始代码一致。如果这实际上是一个头文件,那么也是必要的。