【发布时间】:2020-10-06 17:25:11
【问题描述】:
我在最新的计算机上使用 -std=c++11 准备了一个项目。现在,我必须在 g++ 4.8.5(Red Hat 4.8.5-39)上编译它。令我惊讶的是,该系统对 C++11 标准的支持似乎并不完整。请注意,该项目依赖于 gsoap 库,该库在生产系统上也较旧。
我正在使用以下构造:
class GeoGrid : public ::GeoGrid::GeoGridServiceSoapBindingProxy
{
public:
...
using ContextType = ::GeoGrid::GeoGrid2__ContextType;
...
}
我在旧系统上收到以下错误:
api-2-0.h:434:23: error: expected type-specifier before ‘::’ token
using ContextType = ::GeoGrid::GeoGrid2__ContextType;
我不知道这是由于旧的 gsoap 还是只是旧的 g++。
我的问题是是否可以在不升级系统的情况下解决这个问题?我不得不承认,我一开始并没有完全理解使用'::'令牌的所有后果,这只是一个幸运的猜测,在新系统上完美运行。
【问题讨论】:
-
为什么您认为该错误消息暗示缺乏 C++11 支持?根据this page,GCC 4.8 几乎支持所有 C++11(核心语言)特性。
-
所以,你认为 gobal 命名空间在两个系统上都得到完美且相同的支持 - 然后我必须在其他地方寻找错误,可能是 gsoap 的不同行为
-
为了排除对 C++11 的支持,也许您可以尝试使用常规的
typedef?