Вызов метода С++ из Objective C
У меня есть следующие файлы.
foo.h(заголовочный файл С++)
foo.mm(файл С++)
test_viewcontroller.h(файл заголовка цели c)
test_viewcontroller.m(Objective c file)
Я объявил метод donothing() в foo.h и определил его в foo.mm.Lets say it
двойное далекое (двойное a) { return a; }
Теперь я пытаюсь вызвать эту функцию в test_viewcontroller.m
double var = donothing (somevar);
Я получаю ошибку компоновщика, которая говорит "не может найти символы" _donothing() в test_viewcontroller.o
collect2: ld возвращен 1 статус выхода
Может ли кто-нибудь указать мне, что не так?
Позвольте мне быть точным:
#ifdef __cplusplus
extern "C"
{
char UTMLetterDesignator(double Lat);
NSString * LLtoUTM(double Lat,double Long,double UTMNorthing, double UTMEasting);
double test(double a);
}
#endif
@Carl
Я включил свой пример кода. Говоря, что мне нужно обернуть только метод test() в ifdef.I не понимаю, какую разницу он может сделать. Можете ли вы объяснить?
Ответы
Ответ 1
test_viewcontroller.m
ищет имя символа, не связанного с С++, для donothing()
. Измените его расширение на .mm
, и вы должны быть хорошими. В качестве альтернативы поместите объявление extern "C"
в объявление метода в foo.h
при компиляции файла С++.
Вы хотите, чтобы это выглядело так:
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);
}