Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 忽略g++;编译错误以获得向后兼容性的额外限定_C++_Linux_Compilation_G++ - Fatal编程技术网

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

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) 在类

我正在尝试将一个项目移植到一个新的Linux系统中,该系统具有更新的g++版本。在编译过程中,我得到以下信息:

错误:成员“getCustomer”上的额外限定“Customer::”

在类定义中,我在getCustomer()前面加上Customer::

如果我删除客户::我的代码可以工作,但是代码中有很多条目的前缀是类名和作用域运算符。有没有一种方法(例如编译器指令)可以帮助消除此错误

从my shellgcc版本4.4.2 20091027(Red Hat 4.4.2-7)(gcc)

在类定义中,我在getCustomer()前面加上Customer::

我想你的意思是:

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:我个人对此表示感谢!