0

いくつかの単純な美化されたstructs を含むヘッダー ファイルがいくつかあり、その中に純粋な仮想メソッドが定義されています。コードは Visual Studio 2015 を使用する Windows で正常にコンパイルされますが、GCC が動かなくなります。まず、コード:

コード リスト


namespace CustomUtils
{
    interface API_ABSTRACT overriden
    {
        virtual int GetStatus() const = 0;
    };
}

インポートされたヘッダー ファイルでinterfaceは、次のように定義されていstuctます。

#define interface struct

そしてAPI_ABSTRACT、何の役にも立たない単なるマクロです:

#define API_ABSTRACT

これinterface typedefは、私が制御できない継承されたコードの一部であり、エクスポートする API 関数を制限するために、Windows と Linux でカスタム属性を定義API_ABSTRACTできるように配置されています。これは VS2015 でビルドされますが、Linux ではビルド エラーが発生します。


error: variable 'API_ABSTRACT CustomUtils::overridden' has initializer but incomplete type

行を変更すると:

interface API_ABSTRACT overriden

私がそれが翻訳されていると私が推測するものに:

struct overriden

コードは Linux で正常にコンパイルされます。でコンパイルしgcc -E -dDて、「前処理済み」のソースを画面にレンダリングしてtypedefとの#define置換を確認しましたが、ファイルの出力のみが表示され、.cppヘッダー ( .h) ファイルは表示されないようです。

質問

GCC でコンパイルしようとすると、このコードが機能しないのはなぜですか?

ありがとうございました。


編集#1


からの出力gcc -Eは、問題のある行を次のように示しています。

struct API_ABSTRACT overriden

したがって、犯人はAPI_ABSTRACT何も評価しないマクロにあるようです。

4

1 に答える 1