#includeclass 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.cpp1>d:\cpptest\abc\abc\main.cpp(13): error C2027: 使用了未定义类型“Bclass”1> d:\cpptest\abc\abc\main.cpp(5) : 参见“Bclass”的声明1>d:\cpptest\abc\abc\main.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一个