两个类,相互有一个对方的成员。这样,两个头文件内容如下
//b.h
#include "a.h"class B
{
A object;
};//a.h
#include "b.h"class A
{
B object;
};在GCC里可以编译通过,在VC里就不行。在头文件里加上了#if !defined ... #define或#pragma once也都没用,不用include用前置声明也通不过。怎么做?
//b.h
#include "a.h"class B
{
A object;
};//a.h
#include "b.h"class A
{
B object;
};在GCC里可以编译通过,在VC里就不行。在头文件里加上了#if !defined ... #define或#pragma once也都没用,不用include用前置声明也通不过。怎么做?
class a;
class B
{
A object;
};
#include "b.h"
class b;
class A
{
B object;
};
{
...
};#include "b.h"
class a
{
...
};
//A.h
class B;
class A
{
...
B * pB;
}//A.cpp
#include "B.h"
...正确!
而//A.h
class B;
class A
{
...
B bb;
}//A.cpp
#include "B.h"
...则错
互相嵌套包含,那是编译器要解决的事,与我无关。
GCC就能通过。flyelf(空谷清音) ( ) 的意思,是把b的声明在a.h和b.h里都写一遍吗?
看来VC的作法还是正确的,这种情况应该报错。
从设计上来讲,的确不应该出现这样的相互包含类。
class B
{
...
}#include "A.h"
class C: public B
{
A * pA;
}在A.h中
#include "b.h"
class A
{
B* pC;//
...
}在A.cpp中
#include "C.h"
//使用pC的时候做个强制类型转换
pC = new C();
((C*)pC)->....这样就一切搞定