【发布时间】:2011-07-28 11:43:24
【问题描述】:
我在 Visual Studio 2008 中遇到了一个尴尬的问题。我正在尝试使用如下所示的配置标头(称为 param_defines.h)文件定义字符串到枚举的映射:
DEFINE_ITEM( A, BOOLEAN )
DEFINE_ITEM( B, INT )
DEFINE_ITEM( C, INT )
等等。然后在第二个头文件 (enums.h) 中引用它:
enum ParamType
{
BOOLEAN = 0,
INT
};
enum Param
{
UNKNOWN = -1
#define DEFINE_ITEM( NAME, TYPE ) ,NAME
#include "param_defines.h"
#undef DEFINE_ITEM
};
然后在第三个(源)文件中我这样做:
#include "enums.h"
std::tr1::unordered_map<std::string, int> params;
#define DEFINE_ITEM( NAME, TYPE ) params[ #NAME ] = NAME
#include "param_defines.h"
#undef DEFINE_ITEM
当我编译源文件时,会出现很多错误,例如:
error C2065: 'A': undeclared identifier
error C2065: 'B': undeclared identifier
error C2065: 'C': undeclared identifier
所以预处理器发生的事情并没有完全按照我的意愿去做。
关键是这个。我设置 /P 所以我有一些方法来诊断出了什么问题。当我这样做时,文件编译成功。
【问题讨论】:
标签: c++ visual-studio visual-studio-2008 c-preprocessor