所以,我仍在研究这个大项目,以便在Linux上进行编译.所以,再次,我得到一些不应该允许存在的错误.
这是我得到的一些错误:
(1) error: expected identifier before numeric constant
(2) error: "Value" doesn't name a type
Run Code Online (Sandbox Code Playgroud)
这是一段简化的示例代码,向您展示我在哪里得到这些错误:
class Test
{
public:
enum Value
{
V1 = 0, // error (1) is here
V2 = 1,
V3 = 2
};
private:
Value value; // error (2) is here
public:
// constructor and other function
};
Run Code Online (Sandbox Code Playgroud)
此外,该段代码在项目的某些部分有效.但它不在其他部分.我做了一切,我重命名的东西,以确保它不含糊,不改变任何东西.
坚持GCC 4.1.2
这个片段用g ++ 4.4.3编译得很好,我希望它也能用g ++ 4.1.2编译好.
你遇到的是使用#define常量的原因是在C++中做的根本邪恶的事情.您包含的一个头文件包含如下行:
#define V1 42
Run Code Online (Sandbox Code Playgroud)
最快的解决方案是
#undef V1
Run Code Online (Sandbox Code Playgroud)
虽然,如果有人已经足够恶意来#define V1,然后我感觉到了类似的定义V2,并V3在你的未来.根据我的个人经验windows.h,许多X11标题广泛负责引入这些预处理器定义.
我想提供有关跟踪违规标题的建议,但我通常会使用grep和/或查看哪些标题会在删除时将错误消除.
当我们遇到这个问题时,我们的一般做法是
#undef所有违规常量,并在必要时用更合理的东西替换它们.