我正在努力获得一个Visual C ++ 2005解决方案,以便在unicode中进行编译。但是,在我的一些项目中(但不是全部),我在表单中遇到错误:
1>.\CBitFlags.cpp(25) : error C2065: 'L' : undeclared identifier
并且有问题的代码行是:
LOGERROR(UTILITY, L"Tried to use object to store %d flags, when max is %d",
我是BAFFLED。当L是语言语法的一部分时,似乎将L视为标识符。有没有人知道在某个地方是否有一些必须在项目中启用的标志或编译设置,如果不切换会导致这个?真正奇怪的部分是它不是所有的出现,它只是其中的一部分。它似乎在单个项目中是一致的,但我整个项目编译得很好,而其他项目则像这样失败。
答案 0 :(得分:2)
问题几乎肯定在LOGERROR宏中。看看它如何对待第二个参数。自己扩展宏,有时很容易忽略宏中的小错误。
答案 1 :(得分:0)
由于这似乎是宏中使用的内容,我认为您应该查看LOGERROR
和UTILITY
宏的定义以及它们在代码上下文中展开的内容。使用/P
编译器选项预处理文件而不进行编译步骤,然后查看结果以查看编译器真正看到的内容。
如果我在L
:
wchar_t const* foo = L "foo";
您确定已经复制并粘贴了给您带来麻烦的实际代码吗?
答案 2 :(得分:0)
Visual C ++ 2005确实支持宽字符串的L语法,并且不需要任何特殊标志或任何支持它的东西。所以很可能,你的问题在其他地方。也许是LOGERROR或UTILITY的定义。或者之前丢失的分号,或者....它可能是导致编译器在到达L时期望字符串文字以外的东西的任何东西。