ATL COM サービスがあり、.IDL ファイルで次のように列挙型を宣言しました。
Gourmet.idl 内
typedef enum Food
{
Chocolate = 0,
Doughnut,
HotDog
} Food;
ヘッダー ファイルが自動的に生成され、Gourmet_i.h が作成されます。
同じ ATL COM プロジェクトの別の .CPP ファイル (Decadence.cpp と呼びましょう) に、Gourmet_i.h を #include します。この .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 の列挙型がグローバル名前空間で定義されているために発生することがわかりますが、この定義を含めることは可能であり、グローバル名前空間を汚染しないため、この競合は発生しませんか?