C++ 忽略g++;编译错误以获得向后兼容性的额外限定
我正在尝试将一个项目移植到一个新的Linux系统中,该系统具有更新的g++版本。在编译过程中,我得到以下信息: 错误:成员“getCustomer”上的额外限定“Customer::” 在类定义中,我在getCustomer()前面加上Customer:: 如果我删除客户::我的代码可以工作,但是代码中有很多条目的前缀是类名和作用域运算符。有没有一种方法(例如编译器指令)可以帮助消除此错误 从my shellgcc版本4.4.2 20091027(Red Hat 4.4.2-7)(gcc) 在类定义中,我在getCustomer()前面加上Customer:: 我想你的意思是:C++ 忽略g++;编译错误以获得向后兼容性的额外限定,c++,linux,compilation,g++,C++,Linux,Compilation,G++,我正在尝试将一个项目移植到一个新的Linux系统中,该系统具有更新的g++版本。在编译过程中,我得到以下信息: 错误:成员“getCustomer”上的额外限定“Customer::” 在类定义中,我在getCustomer()前面加上Customer:: 如果我删除客户::我的代码可以工作,但是代码中有很多条目的前缀是类名和作用域运算符。有没有一种方法(例如编译器指令)可以帮助消除此错误 从my shellgcc版本4.4.2 20091027(Red Hat 4.4.2-7)(gcc) 在类
class Customer {
Customer *Customer::getCustomer() { ... }
};
不要。没有必要,因为你已经在类定义中了,我不认为C++标准允许这样做(我对G+老了感到惊讶)。
似乎没有
-std
标志(在GCC 4.4.5中)允许这样做。这样的代码可以用-fpermissive
编译(GCC 4.9.2,而不是clang 3.6.0)
我根据拉斯曼的解释测试了整个程序:
#include <cstdio>
class Customer {
public: Customer *Customer::getCustomer() { return this; }
};
int main()
{
std:printf("%p\n", Customer().getCustomer());
}
#包括
类客户{
public:Customer*Customer::getCustomer(){返回此;}
};
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-fppermissive
给出了一个错误,尽管clang似乎可以识别参数-fppermissive
。也许有人知道如何让它接受这样的代码。这是一个错误,不是警告,所以你的代码肯定有问题(顺便说一句,我们无法检查)。没有任何旗帜可以改变这一事实。我不理解否决票和接近票的要求。这是a-而不是旧的-G++系统上的生产代码的一部分。我们在这里讨论的是编程问题吗?@bitmask,这在早期版本中不是错误,我问编译器是否存在向后兼容性。我没有否决或关闭投票,但我认为有人这样做,因为问题相对模糊,很难重现您的问题。@bitmask,我的第一条评论不是针对你的。是的,你的代码与我们的代码很接近。很抱歉没有在问题处发布此消息。你的意思是需要-std吗?不,我是说-std
似乎不能“修复”这个问题,实际上,你的代码已经被破坏了。G++在每个版本中都严格遵循标准,所以很多非法的东西过去都被接受。@IgnacioVazquez Abrams:我个人对此表示感谢!