问题描述:
#include<iostream>
using namespace std;
class A;
class B
{
public:
B(A* aa)
{
this->a = aa;
}
A* a;
void print()
{
a->Action();
}
};
class A
{
public:
void Action()
{
cout<<"A::Action"<<endl;
}
};
void main()
{
A* a=new A();
B* b=new B(a);
b->print();
system("pause");
}
在定义类B之前,只是声明了类A,这个声明是前向声明,在类A声明之后,定义之前,类A 是不完整类型,即已知A是一个类型,但不知道包含哪些成员。对于不完整类型,只能定义一个A类型的指针或引用,且不能访问它的成员,因为编译器只知道有类A存在而不知道类A到底是什么。
解决办法:
1、将类的定义分成头文件和cpp文件,头文件只声明成员函数,cpp文件中定义成员函数。
2、将需要使用另外一个类的成员函数,在类体外使用内联函数定义成员函数。如下代码所示:
#include<iostream> using namespace std; class A; class B { public: B(A* aa) { this->a = aa; } A* a; void print(); }; class A { public: void Action() { cout<<"A::Action"<<endl; } }; inline void B::print() { a->Action(); } void main() { A* a=new A(); B* b=new B(a); b->print(); system("pause"); }