mian.cpp
#include <iostream>
#include <string>
using namespace std;
#include "A.h"
#include "B.h"
int main()
{
}
A.h
#ifndef _A_H_
#define _A_H_
/*类的前向声明*/
class B;
class A
{
public:
B* b;
//B b1;
void fun()
{
//int a = sizeof(B);
//b->funb();
//b->m_i;
}
};
#endif // !_A_H_
B.h
#ifndef _B_H_
#define _B_H_
class A;
class B
{
public:
A* a;
//A a1;
void funb()
{
}
int m_i;
};
#endif // !_B_H_
在上面的例程当中先是包含了A.h而后包含的B.h
所以在mian.cpp当中是先定义了类A,而后定义的类B
在类与类之间相互包含时,有时候使用类的前向声明是不起作用的,在A.h当中,只要涉及了定义类B对象,或者使用sizeof计算类B的大小,或者使用一个指针去调用类B的成员变量或者成员函数,这几种情况下都是会编译失败的,必须要找到B的定义才行,而如果使用指针的话,编译是ok的,指针在定义时就已经知道了占几个字节,所以只需要前向声明就行,而其它的情况就不一样了。