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

Czy ktoś może mi wskazać, co jest nie tak?

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ć?

Author: Janani, 2010-12-16

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);
}
 34
Author: Carl Norum,
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