忽略g ++编译错误以获得向后兼容性的额外限定

时间:2012-03-07 14:59:44

标签: c++ linux compilation g++

我正在尝试使用更新的g ++版本在新的Linux系统中移植项目。编译时我得到以下内容:

  

错误:成员'getCustomer'上的额外资格'Customer ::'

在类定义中,我在getCustomer()前面添加了Customer ::。

如果我删除 Customer :: ,我的代码可以运行,但是代码中有很多以类名和范围运算符为前缀的条目。有没有办法,例如编译器指令,有助于消除这个错误?

来自我的shell gcc版本4.4.2 20091027(Red Hat 4.4.2-7)(GCC)

2 个答案:

答案 0 :(得分:1)

  

在类定义中,我在getCustomer()前面添加了Customer ::。

我假设你的意思是:

class Customer {
    Customer *Customer::getCustomer() { ... }
};

别。没有必要,因为你已经在课程定义中,我不认为C ++标准甚至允许这样做(我对G ++的老版本感到惊讶吗?)。

似乎没有-std标志(在GCC 4.4.5中)允许这样做。

答案 1 :(得分:1)

此类代码可以使用-fpermissive进行编译。(GCC 4.9.2,而非clang 3.6.0)

我根据larsmans的解释测试了完整的程序:

#include <cstdio>
class Customer {
    public: Customer *Customer::getCustomer() { return this; }
};
int main()
{
    std:printf("%p\n", Customer().getCustomer());
}

它没有使用g++ test.cpp进行编译,但它使用g++ test.cpp -fpermissive编译(带有警告)。即使g++ test.cpp -fpermissive -ansig++ test.cpp -fpermissive -std=c++11也可以。

使用-w你没有得到警告,但也许并不总是最好的想法:你可能希望在出现奇怪的事情时获得通知。

clang++ test.cpp -fpermissive会出错,但clang似乎会识别参数-fpermissive。也许有人知道如何让它接受这样的代码。