3

我有这样的代码结构:

资源.h:

#include"a.h"
#include"b.h"
#include"c.h"

啊:

#ifndef __A__
#define __A__
#include"resource.h"
class B;
class A{
//something uses B
};
#endif

:

#ifndef __B__
#define __B__
#include"resource.h"
class A;
class B{
//something uses A
}
#endif

通道:

#ifndef __C__
#define __C__
#include"resource.h"
class A;
class B;
class C{
//something uses A and B
};
#endif

问题如下:VS2010 告诉我在 ch 中,#include"resource.h"行导致 "resource.h" 包含自身。

但是,这些代码能够按预期编译和执行。所以我想知道是什么导致了 VS 中的智能感知这个错误,以及是否有办法删除它。

PS:我是用VS编译的,没有编译错误。

4

4 回答 4

1

你没有头守卫resource.h

#ifndef __RESOURCE__
#define __RESOURCE__ 1
#include "a.h"
#include "b.h"
#include "c.h"
#endif

但是,不建议使用双下划线,因为它们是为实现而保留的。所以我会使用{PROJECTNAME}_RESOURCE_H. 这也将防止头部保护与其他不这样做的项目发生冲突。

看到您使用的是 Visial Studio,我建议您不要使用标头保护,而是使用#pragma once如果您的项目不进行,我将使用 gcc 进行编译。

于 2013-07-27T16:43:29.450 回答
0

您正在创建循环依赖。在 resource.h 中,您已包含 ah 、 bh 和 ch ,这不是必需的。类文件需要资源,资源文件不需要类信息。

于 2013-07-27T16:48:15.757 回答
0

您可以使用#pragma once预处理器使 resource.h 在编译中只包含一次。

于 2013-07-27T16:45:12.600 回答
0

c.h包括resource.h,然后它本身包括a.hb.h并且每个都resource.h再次包括。

于 2013-07-27T16:45:17.770 回答