У меня неуклюжая проблема в 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, поэтому у меня есть какой-то способ диагностировать, что происходит не так.Когда я это делаю, файл успешно компилируется.