我有一個C++類,我希望暴露給C.經由頭文件揭露的C++類至C
class Foo {
void Method();
}
橋至C
typedef struct Foo CFoo;
#ifdef __cplusplus
extern "C" {
#endif
CFoo * CFooInit();
void CFooRelease(CFoo * v);
void CFooMethod(CFoo * v);
#ifdef __cplusplus
}
#endif
和CPP文件,我有
CFoo * CFooInit(){
return new Foo();
}
void CFooRelease(CFoo * v){
delete v;
}
void CFooMethod(CFoo * v){
v->Method();
}
所有工作正常,但編譯期間有一個問題/警告。
'Foo': type name first seen using 'struct' now seen using 'class'
我知道,爲什麼它在那裏,但我不知道,如何解決它。我無法將class
更改爲struct
,我不能在C代碼中使用class
關鍵字。我可以使用void *
,但它可能導致類型不安全。
這可能是愚蠢的,但你不能這樣做:'類Foo {...}; struct Bar:Foo {};'然後'typedef struct Bar CFoo;'? (另外,爲什麼你不能將'class'更改爲'struct'?) – melpomene
@melpomene是一個外部庫,我只有頭文件。將其更改爲struct可能會導致其他地方出現問題(在其他地方出現相同錯誤的情況下) - –
解決方案可能是特定於編譯器的。你使用什麼編譯器?我的MinGW-w64(GCC 6.2.0)和'-Wall -Wextra'發出這樣的警告。 – HolyBlackCat