いくつかの単純な美化されたstruct
s を含むヘッダー ファイルがいくつかあり、その中に純粋な仮想メソッドが定義されています。コードは 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
何も評価しないマクロにあるようです。