gpt4 book ai didi

c++ - 错误 C2059 : syntax error : 'constant'

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:27 28 4
gpt4 key购买 nike

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

声明静态常量 DELETE 的行报告错误。 注意:编译此文件时不会显示编译器错误 - 它成功构建到库中,但会显示在包含 header 的第二个项目中(间接)。我相信至少还有一两个其他项目将它间接包含在解决方案中——它们在编译时没有问题。

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'错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int,我认为这不相关),但在编译上述文件时不支持。

文件被编译成一个库,该库由另一个项目 (C++) 静态链接到 - 这是生成错误的项目(以及在执行类似操作的第二个 .cpp 文件中)。当我注释掉所有代码时它仍然会出现,所以我认为它与 header 包含有关。

注释掉生成错误的行会使构建在 Windows 上运行(并在 Linux 上失败,但我认为在 ifndef 中注释掉它的对应行应该可以解决这个问题),但我真的很想知道编译器为什么会失败该特定行以及错误的实际含义。此外,最好不要修改自动生成的代码。

编辑:将术语拆分成单独的行使编译器指向 DELETE 行。也许在某处自动定义了一个名为 DELETE 的宏?

编辑 2:稍微清理了标题部分以消除一些可能的误解。顺便说一下,重命名 DELETE 变量也会清除错误。

编辑 3: 显然我需要了解更多关于 VS 的知识 -/P 生成预处理文件而不生成目标文件,因此构建当然会失败而不会生成编译错误。此外,看起来某处确实有一个宏,它将 DELETE 定义为 (0x00010000L)。

最佳答案

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

关于c++ - 错误 C2059 : syntax error : 'constant' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10518424/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com