【发布时间】:2013-04-13 08:36:27
【问题描述】:
我有一个 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 的枚举是在全局命名空间中定义的,但是是否可以包含这个定义——因此它不会污染全局命名空间——而且我不会有这个冲突?
【问题讨论】:
-
typedef的意义何在?这不是 C。在 C++ 中,标签查找是自动执行的,无需指定enum或struct。