我有一个 ATL COM 服务,在 .IDL 文件中,我声明了一个枚举,如下所示:
在 Gourmet.idl
typedef enum Food
{
Chocolate = 0,
Doughnut,
HotDog
} Food;
头文件会自动生成,创建 Gourmet_i.h。
在同一个 ATL COM 项目的另一个 .CPP 文件(我们称之为 Decadence.cpp)中,我 #include Gourmet_i.h。我在这个 .CPP 中实现了一个类,它位于命名空间“Chocolate”下。
例如在 Decadence.cpp 中:
#include "Gourmet_i.h"
namespace Chocolate {
// Constructor
void Decadence::Decadence() {}
// ... and so on
} // namespace Chocolate
编译后,我收到有关 Gourmet_i.h 的以下错误:
error C2365: 'Chocolate': redefinition; previous definition was 'namespace'
我看到这是因为 IDL 的枚举是在全局命名空间中定义的,但是是否可以包含这个定义——所以它不会污染全局命名空间——而且我不会有这个冲突?