いくつかの単純な美化された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何も評価しないマクロにあるようです。