我正在尝试使用更新的g ++版本在新的Linux系统中移植项目。编译时我得到以下内容:
错误:成员'getCustomer'上的额外资格'Customer ::'
在类定义中,我在getCustomer()前面添加了Customer ::。
如果我删除 Customer :: ,我的代码可以运行,但是代码中有很多以类名和范围运算符为前缀的条目。有没有办法,例如编译器指令,有助于消除这个错误?
来自我的shell gcc版本4.4.2 20091027(Red Hat 4.4.2-7)(GCC)
答案 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 -ansi
和g++ test.cpp -fpermissive -std=c++11
也可以。
使用-w
你没有得到警告,但也许并不总是最好的想法:你可能希望在出现奇怪的事情时获得通知。
clang++ test.cpp -fpermissive
会出错,但clang似乎会识别参数-fpermissive
。也许有人知道如何让它接受这样的代码。