Aşağıdaki dosyalar var.C++ yönteminin Objective C'den çağrılması
foo.h (C++ başlık dosyası)
foo.mm (C++ dosyası)
test_viewcontroller.h (objektif C başlık dosyası)
test_viewcontroller.m (Amaç C dosyası)
I bildirdikten bir yöntem foo.h olarak DoNothing() ve foo.mm.Lets içinde tanımlanan
çift DoNothing (çift) {bir geri olduğunu söyler; }
Şimdi, test_viewcontroller.m içinde
Ben test_viewcontroller.oçift var = DoNothing (SomeVar) Bu fonksiyonu çağırmak için deneyin;
collect2 içinde _donothing() "sembolleri bulamıyorum" diyor bağlayıcı hatası alıyorum: ld
kimse yanlış ne olduğu beni işaret edebilir 1 çıkış durumunu
döndü?
beni kesin olalım:
#ifdef __cplusplus
extern "C"
{
char UTMLetterDesignator(double Lat);
NSString * LLtoUTM(double Lat,double Long,double UTMNorthing, double UTMEasting);
double test(double a);
}
#endif
@Carl
Ben ifdef.I sadece testi() yöntemini sarmak gerektiğini söyleyerek benim kod sample.Are dahil ettikne fark edebileceğini anlamıyorum. Lütfen açıklar mısınız?
ben
Bunu şuna benzer olmasını istiyorsanız extern "c" eklemeye çalıştı. ama yeni bir hata alıyorum - "Beklenen iden tifier veya '(' string sabitinden önce " – Janani
@ whocares," extern "C" yi sadece C++ için eklemeniz gerekir - bu, bir # # fdef __cplusplus "bloğuna sarmak anlamına gelir. –
@Carl - Cevabınız için çok teşekkürler! Linker hatası şimdi gitti! ama "test_viewcontroller.m" de yeni bir uyarı aldım - işlev "örtme()" örtük bildirimi. Bunun yalnızca işlev bildirimi olan başlık dosyasına dahil olmadığımda gerçekleşeceğine inanıyorum. Ama bir tane daha aldım. "test_viewcontroller.m" içinde. Lütfen bana neyin yanlış olduğunu söyleyin. – Janani