我正在尝试使用AIX 11.1编译器在新的AIX 7机器上编译旧的C ++应用程序。此应用程序在非POD类上使用offsetof。
我将langlvl选项设置为strict98,并设置“offsetnonpod”选项,该选项告诉编译器允许在非POD类上使用offsetof。
如果我删除了offsetnonpod设置并使用extended for langlvl,我会得到同样的错误。 看来我必须在指定offsetnonpod选项时做错了,否则编译器实际上不支持这样的功能。
#include <iostream>
struct Foo
{
private:
int x;
};
int main()
{
std::cout << offsetof(Foo, x);
return 0;
}
我用这个命令构建:
xlc++_r -qlanglvl=offsetnonpod -qlanglvl=strict98 test.cpp
我明白了:
"test.cpp", line 11.32: 1540-0287 (S) "offsetof" must not be applied to "struct Foo". It is not a POD (plain old data) type.
答案 0 :(得分:0)
该选项将消息从(S)更改为(W)。警告消息将允许编译成功并允许offsetof。
首先把-qlanglvl = strict98作为该选项设置-qlanglvl = nooffsetnonpod
xlC -qlanglvl = strict98 -qlanglvl = offsetnonpod a.cpp “a.cpp”,第11.18行:1540-1281(W)“offsetof”不能应用于“struct Foo”。它不是POD(普通旧数据)类型。