摘要
我正在尝试使用AIX11.1编译器在新的AIX7机器上编译一个旧的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.
发布于 2013-05-01 20:13:48
该选项将消息从(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 (普通旧数据)类型。
https://stackoverflow.com/questions/16305883
复制相似问题