指指向class,相互include
C.h 的容
#include "b.h "
#ifndef C_H
#define C_H
class C
{
private:
B *pB;
public:
C(){pB=NULL;}
void AddB(B &b)
{
pB = &b;
}
void testC(int i)
{
if(pB)
cout < <pB-> testB (i);
}
};
#endif
B.h的容
#ifndef BB
#define BB
#include "C.h "
class B
{
public:
C m_c;
int ib;
B(){ib=2;}
int testB(int j)
{
j=j+ib;
return j;
}
int testC(int j)
{
m_c.testC (4);
}
};
#endif
main.cpp的容
#include <iostream>
using namespace std;
#include "b.h "
#include "c.h "
main()
{
int i=20;
B bb;
bb.testB(i);
C cc;
cc.AddB(bb);
cc.testC(30);
}
像指指向生自己class的,是否能定
[解决办法]
把C的声明(c.h)和实现(c.cpp)分开, 在c.h中使用forward declaration:
C.h 的容
#ifndef C_H
#define C_H
//forward declaration
class B;
class C
{
private:
B *pB;
public:
C();
void AddB(B &b);
void testC(int i);
};
#endif
//c.cpp file
#include "b.h "
#include "c.h "
C::C()
{
....
}
void C::AddB(B &b)
{
.....
}
void C::testC(int i)
{
}