2017-04-12 145 views
1

我試圖訪問一個狀態變量在.h文件中聲明,但編譯器說變量不存在。我是否需要在橋接頭文件中添加任何內容?快速訪問C變量

在我迅速的文件無法訪問dstatecstate

編譯器說就行了g722_coder_init(&dstate) 「使用未解決的標識符 'dstate' 的」。

Compiler error

頭文件

#ifdef __cplusplus 
extern "C" { 
#endif 

extern struct g722_dstate dstate; 
extern struct g722_cstate cstate; 

int g722_coder_init ( struct g722_cstate *s ); 
int g722_encode(short *data, unsigned char *outdata,int len, struct g722_cstate *s ); 
int g722_decoder_init ( struct g722_dstate *s); 
int g722_decode(unsigned char *decdata, short *pcmout, int len, struct g722_dstate *s); 

#ifdef __cplusplus 
} 
#endif 

橋接報

#import "g722_codec.h" 

回答

0

的問題是,struct g722_dstate是「不完全型」, 和SWIFT不能導入一個不完整的類型的變量,只變量 其是指針變爲不完整類型(並且那些被導入 作爲OpaquePointer)。

將完整的結構定義添加到導入的頭文件中, 是最簡單的解決方案。

如果這是不可能的,那麼一個解決方法是

#import "g722_codec.h" 

static struct g722_dstate * __nonnull dstatePtr = &dstate; 

添加到橋接報頭文件,它定義包含「不透明」 dstate變量的 地址的變量。這是進口到斯威夫特

var dstatePtr: OpaquePointer 

然後可以使用,例如, as

g722_coder_init(dstatePtr) 
0

你可以像C語言創建文件的功能,並在縮小添加函數名作爲向前聲明標題 適用於考試PLE -

//In c File you have definition & forward declaration 
int g722_encode(short *data, unsigned char *outdata,int len, struct g722_cstate *s ); 
int g722_encode(short *data, unsigned char *outdata,int len, struct g722_cstate *s ){ 

} 

橋接報頭應該是 -

#import "g722_codec.h" 
int g722_encode(short *data, unsigned char *outdata,int len, struct g722_cstate *s );