首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

指標指向class問題,相互include,该如何解决

2012-02-07 
指標指向class問題,相互includeC.h的內容#includeb.h #ifndefC_H#defineC_HclassC{private:B*pBpublic:

指標指向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)
{
}


热点排行