ultima tutorial objective mundo logo hola objective-c objective-c++

objective-c - tutorial - objective c vs c++



Error de vinculador al llamar a la funciĆ³n C desde Objective-C++ (2)

Tengo un problema de enlazador raro Tengo un código que se ve así:

double given_amount = self.modelController.levelCompleteRewardAmount; swrve_currency_given(swrve, (CFStringRef)@"currencyName", given_amount);

Tengo este código en dos lugares separados: en un archivo object-c y object-c ++. Se compila bien en la tierra del objetivo-C, pero la función swrve_currency_given () provoca lo siguiente en mi archivo WGController.mm:

Undefined symbols for architecture armv7: "swrve_currency_given(Swrve*, __CFString const*, double)", referenced from: -[WGController giveTheUserSomeCashForPlayingThisLevel] in WGController.o ld: symbol(s) not found for architecture armv7 collect2: ld returned 1 exit status

No estoy completamente seguro de si este error está relacionado con el objeto Obj-C vs. C ++, pero parece que sí. Mi teoría es que quizás piense que es una función en la clase Obj-C? El código ''swrve'' es un código de terceros, un archivo .h y .c y estoy importando así:

#import "swrve.h"

Cualquier ayuda es apreciada! Gracias


Es posible que deba rodear el prototipo de función con:

#if defined __cplusplus extern "C" { #endif void swrve_currency_given (...whatever goes here...); #if defined __cplusplus }; #endif

Eso le dice al compilador que es una función C y no una función C ++.


Si está utilizando la función c en el archivo c ++. debe utilizar extern "c"{} . En archivo .h

#ifdef __cplusplus extern "C" { #endif swrve_currency_given(parameter1, parameter2, parameter3);// a c function #ifdef __cplusplus } #endif

extern "C" está destinado a ser reconocido por un compilador de C ++ y notificar al compilador que la función anotada se compila (o se debe) compilar en estilo C.

Si está enlazando a una biblioteca que fue compilada como código C. utilizar

extern "C" { #include "c_only_header.h" }

Echa un vistazo a ¿ Cuándo usar extern "C" en C ++?