错误C2059:语法错误:'常量'

Nan*_*n L 4 c++ visual-studio-express

我有一段代码是自动生成的,可以在Linux上编译,但不能在Windows上使用Visual Studio 2008 Express编译.我遇到的问题是我不理解编译器错误.我不认为我可以发布确切的代码,所以这是一个消毒版本...

报告静态const 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
};
Run Code Online (Sandbox Code Playgroud)

常量本身只显示在一个地方(当我在项目中搜索术语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
Run Code Online (Sandbox Code Playgroud)

报告的错误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).

AnT*_*AnT 10

肯定有一个宏DELETE定义在某处.