0

概要

AIX 11.1 コンパイラーを使用して、新しい AIX 7 ボックスで古い C++ アプリケーションをコンパイルしようとしています。このアプリケーションは、非 POD クラスで offsetof を使用します。

langlvl オプションを strict98 に設定し、「offsetnonpod」のオプションも設定します。これにより、POD 以外のクラスで offsetof を許可するようコンパイラーに指示されます。

offsetnonpod 設定を削除し、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.
4

1 に答える 1

0

このオプションは、メッセージを (S) から (W) に変更します。警告メッセージにより、コンパイルが成功し、offsetof が許可されます。

-qlanglvl=strict98 を最初に入力すると、そのオプションは -qlanglvl=nooffsetnonpod を設定します。

xlC -qlanglvl=strict98 -qlanglvl=offsetnonpod a.cpp "a.cpp", line 11.18: 1540-1281 (W) "offsetof" は "struct Foo" に適用できません。POD (plain old data) タイプではありません。

于 2013-05-01T12:13:47.800 に答える