純粋な仮想メソッドを定義したシンプルでわかりやすいのヘッダーファイルがいくつかあります。コードはVisual Studio 2015でWindows上で正常にコンパイルされますが、GCCは固まっています。まず、コード:インポートされたヘッダーファイル、interface
で関数属性にマクロを使用すると、GCC - "初期化子は不完全な型です"というエラーが発生する
コード表示
namespace CustomUtils
{
interface API_ABSTRACT overriden
{
virtual int GetStatus() const = 0;
};
}
はちょうどstuct
のように定義される:
#define interface struct
API_ABSTRACT
そしてだけですマクロfor nothing:
#define API_ABSTRACT
interface
typedef
は、私は何のコントロールの上に持っていない継承されたコードの一部であり、私はWindowsとLinuxでのdefine custom attributesは私がエクスポートたAPI機能を制限することができるようにAPI_ABSTRACT
が整備されています。私は、行を変更した場合
error: variable 'API_ABSTRACT CustomUtils::overridden' has initializer but incomplete type
::これはVS2015でビルドしますが、Linux上で、私は、ビルドエラーを取得するために
interface API_ABSTRACT overriden
を私はそれが翻訳されていると推定:
struct overriden
コードはLinuxでうまくコンパイルされます。私はgcc -E -dD
でコンパイルを試みて、 "前処理済み"のソースをtypedef
と#define
の置換を見るためにスクリーンにレンダリングしましたが、.cpp
ファイルの出力のみを表示し、ヘッダ(.h
)ファイルは表示していないようです。
質問
ないのはなぜGCCでコンパイルしようとすると、このコードは動作しますか?
ありがとうございます。
編集#1
はgcc -E
からの出力は、問題の行があることを示しています
struct API_ABSTRACT overriden
は、だから、犯人は何もないと評価されたマクロAPI_ABSTRACT
、あるようです。
* interfaceはstruct *にtypedefedされていますか? – SergeyA
@SergeyA更新された質問を参照してください。 30秒後に更新されます。 – DevNull
'typedef struct interface;'は有効なC++コードではありません。 – SergeyA