正しく覚えていれば。このコードはうまくいくはずです。C++はCの構造体ポインタパラメータを持つC関数を呼び出す
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
int a;
} Base;
typedef struct {
int a;
} Derived;
void Init(Base* b) {
b->a = 1;
}
#ifdef __cplusplus
}
#endif
int main() {
Derived d;
Init(&d); // error can not convert argument 1 from 'Derived *' to 'Base *'
}
これはCソース(extern "C"なし)としてコンパイルされます。どのように私はそれをCの部分を変更せずにC + +としてコンパイルすることができますか?
編集:CとC++の両方で実際にコピーしてテストできるようにコードを修正しました。
をあなたが実際に 'Base'から' Derived'を得ていない:C導出で
は通常埋め込むことによってシミュレートされます。 –
@RichardHodgesその部分はCソースです。 C++ではありません。 –
@ J.Doeそうでない場合、コンパイラは 'Derived *'を 'Base *'にどのように変換するべきですか? – Darhuuk