#include<stdio.h> class Bclass; class Aclass { public: friend Bclass; void func() { pB->funcB(); } int data; Bclass* pB; }; class Bclass { public: friend Aclass; void funcB() { p->func(); } Aclass* p; int data; }; int main() { return 0; }
编译结果:
1>------ 已启动生成: 项目: Abc, 配置: Debug Win32 ------
1> main.cpp
1>d:cpptestabcabcmain.cpp(13): error C2027: 使用了未定义类型“Bclass”
1> d:cpptestabcabcmain.cpp(5) : 参见“Bclass”的声明
1>d:cpptestabcabcmain.cpp(13): error C2227: “->funcB”的左边必须指向类/结构/联合/泛型类型
A类里面包含B类的指针,并且方法里面调用B类的方法,B类里面包含A类的指针,同样也调用A的方法,搞了半天没搞定
找来大神,说:你虽然申明了B类,但是,编译器只是知道有这个东西,并没有实现方法,要把分开,头文件一个,cpp一个
class Bclass; class Aclass { public: friend Bclass; void func(); int data; Bclass* pB; }; class Bclass { public: friend Aclass; void funcA() { p->func(); } Aclass* p; int data; };
把实现放到cpp中
#include"Aclass.h" void Aclass::func() { pB->funcA(); }
完美解决。
启发c++写东西,还是要分开把类分在两个里面的,头文件一个,cpp一个