错误 C2059:语法错误: 'constant'
error C2059: syntax error : 'constant'
我有一段自动生成的代码,可以在Linux上编译,但不能在使用Visual Studio 2008 Express的Windows上编译。我遇到的问题是我不了解编译器错误。我认为我无法发布确切的代码,所以这里有一个经过净化的版本......
对于声明静态常量 DELETE 的行报告错误。注意:编译此文件时,编译器错误不会显示 - 它成功构建到库中,但会显示在包含标头的第二个项目中(间接(。我相信至少有一两个其他项目将其间接包含在解决方案中 - 它们在编译时没有问题。
File_A.h:
enum LONG_TYPE_NAME {
ENUM_NAME_PREFIX_ADD = 0,
ENUM_NAME_PREFIX_CHANGE = 1,
ENUM_NAME_PREFIX_DELETE = 2,
ENUM_NAME_PREFIX_SOMETHINGELSE = 3,
};
//Lots of code here
class FOO : public ::LIBRARY_NAME {
public:
//Some stuff
private:
//Some stuff
public:
//Some more stuff
typedef LONG_TYPE_NAME SHORT_NAME;
static const SHORT_NAME ADD = ENUM_NAME_PREFIX_ADD;
static const SHORT_NAME CHANGE = ENUM_NAME_PREFIX_CHANGE;
/* compiler error for the following line only*/
static const SHORT_NAME DELETE = ENUM_NAME_PREFIX_DELETE;
static const SHORT_NAME SOMETHINGELSE = ENUM_NAME_PREFIX_SOMETHINGELSE;
//More stuff
};
常量本身只出现在一个地方(当我在项目中搜索术语 DELETE 时(:
File_A.cc:
#ifndef _MSC_VER
const LONG_TYPE_NAME FOO::ADD;
const LONG_TYPE_NAME FOO::CHANGE;
const LONG_TYPE_NAME FOO::DELETE;
//More stuff
#endif // _MSC_VER
报告的错误是error C2059: syntax error : 'constant'
(后跟error C2258: illegal pure syntax, must be '= 0'
和error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
,我认为这些错误不相关(,但在编译上述文件时则不然。
这些文件被编译到一个由另一个项目(C++(静态链接到的库 - 这是产生错误的库(以及在执行类似操作的第二个.cpp文件中(。当我注释掉所有代码时,它仍然会显示,所以我认为它与标题包含有关。
注释掉生成错误的行会使构建在 Windows 上工作(并且在 Linux 上失败,但我认为在 ifndef 中注释掉它的对应项应该可以解决这个问题(,但我真的很想知道为什么编译器在该特定行失败以及错误实际上意味着什么。此外,最好不要修改自动生成的代码。
编辑:将术语拆分为单独的行会使编译器指向 DELETE 行。也许在某处自动定义了一个名为 DELETE 的宏?
编辑2:稍微清理了标题部分,以消除一些可能的误解。顺便说一下,重命名 DELETE 变量也会清除错误。
编辑3:显然,我需要了解有关VS的更多信息 -/P生成预处理的文件而不生成目标文件,因此构建当然会失败而不会产生编译错误。此外,它看起来确实在某处有一个宏,它将 DELETE 定义为 (0x00010000L(。
在某处定义了宏DELETE
。
正如AnT所说,之前某处存在冲突#define
。
对于其他来的人,我想添加:
不幸的是,当包含Windows.h
时,例如来自 .
winerror.h
的#define NO_ERROR 0L
时,这种冲突经常发生。所以当你知道,你的系统有自己的NO_ERROR
,我建议将Windows.h
的包含封装在一个mywindows.h
中,如下所示:
# if defined NO_ERROR
# error Unfortunately, there is a conflict with define NO_ERROR from Windows Kits10include*sharedwinerror.h. Please include mywindows.h first.
# endif
# include "Windows.h"
# if defined NO_ERROR
# undef NO_ERROR
/* until someone really needs THIS winerror define */
# endif
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- 为什么static_assert错误:即使我传递常量"expression must have a constant value"?
- 为什么在main()之前断言会导致语法错误"error: expected ')' before numeric constant"?
- 错误 C2059:语法错误:从结构成员声明'constant'
- 如何修复此错误"the value of 'x1' is not usable in a constant expression"?static_assert
- 外部"C"导致错误"expected '(' before string constant"
- boost::asio::d eadline_timer 导致"a function call cannot appear in a constant-expression"错误
- 错误 C2059:语法错误: 'constant'
- 错误 C2059:语法错误'constant'
- 需要解决方案:错误C2059:语法错误'constant'
- 视觉C++错误 C2143:语法错误:'constant'之前缺少';'
- 无符号字符给出错误:"expression must have a constant value"
- 编译器错误"character constant too long for its type" 。怎么了?
- 获取错误"array bound is not an integer constant before ']' token"
- 'Constant Expression Required' 错误,同时将正式参数保留为常量
- 如何编译 MSHTML v9 的.dll。我目前收到 100 多个"MIDL 2035: constant expression expected"错误
- 另一个"expected unqualified-id before numeric constant"错误
- 模板类构造函数,在第二个模板中有一个参数引发错误"constant"