B_func();}}; class B {public:void B_func() {std::cout << "sml" << std::endl;}}; int main() {B* T1 = new B();A* T2 =new A();T2 ->_invalid use of incomplete type 'class ">
赞
踩
下列代码编译的时候会报错如标题
#include "iostream" class B; class A { public: void func(B* para) { para -> B_func(); } }; class B { public: void B_func() { std::cout << "sml" << std::endl; } }; int main() { B* T1 = new B(); A* T2 =new A(); T2 -> func(T1); }
修改方法如下:
#include "iostream" //classA中用到了classB的成员,所以classB要放到classA之前 class B { public: void B_func() { std::cout << "sml" << std::endl; } }; class A { public: void func(B* para) { para -> B_func(); } }; int main() { B* T1 = new B(); A* T2 =new A(); T2 -> func(T1); }
追问:
你说的对,但是现在我不想把B放到A之前。这个只是我举的例子,实际中的代码,A中有B,B中有A,所以在不调整A和B类的位置前提下 怎么解决上面的错误呀,谢谢你了!
追答:
因为classA的func函数使用了B的成员,所以必须在使用之前知道B的定义细节。
你可以把A的func延后实现(只在classA中定义func)。
具体代码如下:
class B; class A { public: void func(B* para); }; class B { public: void B_func() { std::cout << "sml" << std::endl; } }; void A::func(B* para) { para -> B_func(); } int main() { B* T1 = new B(); A* T2 =new A(); T2 -> func(T1); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。