Wywołanie metody C++ z Objective C
Mam następujące pliki.
Foo.h (plik nagłówkowy C++)
foo.mm (plik C++)
test_viewcontroller.h (objective C Header file)
test_viewcontroller.m (Objective C file)
Zadeklarowałem metodę donothing () w foo.h i zdefiniował go w foo. mm. powiedzmy, że jest
Double donothing (double a) { return a; }
Teraz próbuję wywołać tę funkcję w test_viewcontroller.m
Double var = donothing (somevar);
Dostaję błąd linkera, który mówi "nie można znaleźć symboli" _donothing () w test_viewcontroller.o
collect2: ld zwrócił 1 status wyjścia
Powiem precyzyjnie:
#ifdef __cplusplus
extern "C"
{
char UTMLetterDesignator(double Lat);
NSString * LLtoUTM(double Lat,double Long,double UTMNorthing, double UTMEasting);
double test(double a);
}
#endif
@Carl
Dodałem próbkę kodu.Mówią, że muszę zawinąć tylko metodę test() w ifdef.Nie rozumiem, co to za różnica.Możesz to wyjaśnić?
1 answers
test_viewcontroller.m
poszukuje Nie-c++ - zniekształconej nazwy symbolu dla donothing()
. Zmień jego rozszerzenie na {[5] } i powinieneś być dobry. Alternatywnie, umieść deklarację extern "C"
na deklaracji metody w {[7] } podczas kompilacji pliku C++.
Chcesz, aby wyglądało to tak:
Foo.h:
#ifdef __cplusplus
extern "C" {
#endif
double donothing(double a);
#ifdef __cplusplus
}
#endif
Foo.mm:
#include "foo.h"
double donothing(double a)
{
return a;
}
Test_viewcontroller.m:
#import "foo.h"
- (double)myObjectiveCMethod:(double)x
{
return donothing(x);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-16 01:04:58