私はCはC
typedef struct Foo CFoo;
#ifdef __cplusplus
extern "C" {
#endif
CFoo * CFooInit();
void CFooRelease(CFoo * v);
void CFooMethod(CFoo * v);
#ifdef __cplusplus
}
#endif
とのcppファイル内にC.
class Foo {
void Method();
}
に橋を公開するC++クラスを持つようにヘッダファイルを経由してC++クラスを公開、私は
を持っていますCFoo * CFooInit(){
return new Foo();
}
void CFooRelease(CFoo * v){
delete v;
}
void CFooMethod(CFoo * v){
v->Method();
}
すべて正常ですが、コンパイル中に1つの問題/警告があります。
'Foo': type name first seen using 'struct' now seen using 'class'
私は知っています、なぜそれがあるのですか、私はそれを修正する方法を知りません。 class
をstruct
に変更できず、Cコードにclass
というキーワードを設定することはできません。私はvoid *
を使うことができますが、安全ではないタイプにつながる可能性があります。
これは愚かかもしれませんが、あなただけではできません: 'class Foo {...}; struct Bar:Foo {}; '次にtypedef struct Bar CFoo;'? (また 'class'を' struct'に変更できないのですか?) – melpomene
@melpomeneは外部ライブラリであり、ヘッダのみを持っています。それを構造体に変更すると、どこか別のものが壊れる可能性があります(同じエラーが他の場所に現れた場合) - –
解決策はコンパイラ固有のものです。どのようなコンパイラを使用しますか?私のMinGW-w64(GCC 6.2.0)の '-Wall -Wextra'はそのような警告を出します。 – HolyBlackCat