J'ai les fichiers suivants.Appel de la méthode C++ à partir de l'objectif C
foo.h (fichier d'en-tête C++)
de foo.mm (fichier C++)
test_viewcontroller.h (fichier d'en-tête objectif c)
test_viewcontroller.m (fichier Objectif c)
J'ai déclaré procédé DoNothing() dans foo.h et défini dans la foo.mm.Lets disent qu'il est
à double DoNothing (double a) { retourner un; }
Maintenant, j'essaie d'appeler cette fonction dans test_viewcontroller.m
doubles var = DoNothing (somevar);
J'obtiens l'erreur de liaison qui dit « ne peut pas trouver des symboles » _donothing() dans test_viewcontroller.o
collect2: ld retourné 1 état de sortie
Quelqu'un peut-il s'il vous plaît me montrer à ce qui ne va pas?
Laissez-moi être précis:
#ifdef __cplusplus
extern "C"
{
char UTMLetterDesignator(double Lat);
NSString * LLtoUTM(double Lat,double Long,double UTMNorthing, double UTMEasting);
double test(double a);
}
#endif
@Carl
J'ai inclus mon sample.Are code disant que je dois envelopper seulement la méthode d'essai() dans ifdef.I ne comprends pas quelle différence il peut faire.Pouvez-vous s'il vous plaît expliquer?
I essayé d'ajouter extern "c" .mais j'ai une nouvelle erreur - "Iden attendu tifier ou '(' avant la constante de chaîne " – Janani
@whocares, vous devez ajouter le' extern "C" 'seulement pour C++ - ce qui signifie l'encapsuler dans un bloc' #ifdef __cplusplus'. –
@Carl - Merci beaucoup pour la réponse! L'erreur de Linker est partie maintenant !! mais j'ai un nouvel avertissement dans "test_viewcontroller.m" - déclaration implicite de la fonction "donothing()". Je crois que cela se produit seulement quand je n'ai pas inclus le fichier d'en-tête qui a la fonction declaration.but j'ai importé foo.h dans "test_viewcontroller.m" .Pouvez-vous s'il vous plaît dites-moi ce qui ne va pas? – Janani