C/C++ appel de méthode en C
Fermé
Bonjour,
Je suis en train de modifier des fichiers en C pour construire une classe C++. J'ai donc transformé la plupart des fonctions C du fichier et je les ai inclus dans une classe. A priori à l'intérieur du même fichier il ne semble pas y avoir de soucis.
Mais le problème c'est qu'un autre fichier C essaie d'appeler une des fonctions que j'ai mis dans ma classe, qui est donc devenu une méthode. Et bien sur elle ne la trouve pas. Ca me semble assez logique qu'elle ne le trouve pas mais ça m'arrange pas du tout.
D'où ma question comment appeler une méthode C++ dans une fonction C?
Je suis en train de modifier des fichiers en C pour construire une classe C++. J'ai donc transformé la plupart des fonctions C du fichier et je les ai inclus dans une classe. A priori à l'intérieur du même fichier il ne semble pas y avoir de soucis.
Mais le problème c'est qu'un autre fichier C essaie d'appeler une des fonctions que j'ai mis dans ma classe, qui est donc devenu une méthode. Et bien sur elle ne la trouve pas. Ca me semble assez logique qu'elle ne le trouve pas mais ça m'arrange pas du tout.
D'où ma question comment appeler une méthode C++ dans une fonction C?
A voir également:
- C/C++ appel de méthode en C
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Appel inconnu - Guide
- Je peux appeler mais pas recevoir d'appel sur mon portable - Forum Téléphones & tablettes Android
- Prix d'un appel local - Forum Vos droits sur internet
- Double appel - Guide
6 réponses
Canard007
Messages postés
5929
Date d'inscription
mercredi 26 mai 2004
Statut
Contributeur
Dernière intervention
18 septembre 2009
215
12 avril 2005 à 18:30
12 avril 2005 à 18:30
heu j vais peu etre dire une connerie mais cela me parait impossible puisque c n'a aucune idée de ce qu'est une methode.
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
12 avril 2005 à 19:39
12 avril 2005 à 19:39
lol,
Les canard sont de plus en plus pointilleux de nos jours...
Faut éventuelement passer par une instance de ta classe, non ?(si c comme en java !). Ou alors c'est que tu es trop flémard pour comprendre le programme que tu recopie, sinon tu aurais déjà changé celui-ci de manière à ce que ca marche, ;)
++
Les canard sont de plus en plus pointilleux de nos jours...
Faut éventuelement passer par une instance de ta classe, non ?(si c comme en java !). Ou alors c'est que tu es trop flémard pour comprendre le programme que tu recopie, sinon tu aurais déjà changé celui-ci de manière à ce que ca marche, ;)
++
Salut =)
Oui, c'est comme en Java, il est nécessaire de passer par une instance, mais tu peux nous dire quelle est l'erreur de ton compilo exactement ? parce que "il ne la trouve pas" n'est pas très clair je trouve.
++
Oui, c'est comme en Java, il est nécessaire de passer par une instance, mais tu peux nous dire quelle est l'erreur de ton compilo exactement ? parce que "il ne la trouve pas" n'est pas très clair je trouve.
++
parce que "il ne la trouve pas" n'est pas très clair je trouve.
Ouaip... Erreur de compil', ou d'édition de lien ?
Je veux dire, est-ce que ton fichier ".c" compile, et c'est au moment de créer l'éxé que ça plante, ou bien direct sur le ".c" ???
Quand à :
Oui, c'est comme en Java, il est nécessaire de passer par une instance
Forcément... Une méthode d'instance possède un argument caché, qui correspond à this... Si on a pas d'instance, ce paramètre ne peut être initialisé, donc ça foire...
Je veux dire
Pour appeller du C++ depuis du C, le plus simple est de transcrire (à l'identique) ton fichier ".c" en ".cpp" et de le recompiler à la mode C++.
Il y a bien des astuces, style faire jouer le C99 (syntaxe très proche du C++), etc... Mais c'est finaud et loin d'être élégant. Sur le coup la "méthode bourrin" est plus adaptée. Tu veux faire du C++ ? Fais le jusqu'au bout.
Rien, en C++ N'OBLIGE à faire des classes. Tes modules C compileront parfaitement en C++, et te permettrons d'utiliser namespaces, classes, fonctions surchargées et autres.
Ouaip... Erreur de compil', ou d'édition de lien ?
Je veux dire, est-ce que ton fichier ".c" compile, et c'est au moment de créer l'éxé que ça plante, ou bien direct sur le ".c" ???
Quand à :
Oui, c'est comme en Java, il est nécessaire de passer par une instance
Forcément... Une méthode d'instance possède un argument caché, qui correspond à this... Si on a pas d'instance, ce paramètre ne peut être initialisé, donc ça foire...
Je veux dire
a->maMethode(b, d, e); // est en fait traduit en : maMethode(a, b, d, e);
Pour appeller du C++ depuis du C, le plus simple est de transcrire (à l'identique) ton fichier ".c" en ".cpp" et de le recompiler à la mode C++.
Il y a bien des astuces, style faire jouer le C99 (syntaxe très proche du C++), etc... Mais c'est finaud et loin d'être élégant. Sur le coup la "méthode bourrin" est plus adaptée. Tu veux faire du C++ ? Fais le jusqu'au bout.
Rien, en C++ N'OBLIGE à faire des classes. Tes modules C compileront parfaitement en C++, et te permettrons d'utiliser namespaces, classes, fonctions surchargées et autres.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
C'est à l'édition des liens que le bas blesse.
Je vais donc prendre la solution de tout passer en C++ , c'est compliqué mais bon si ça fonctionnne c'est le principal ;)
Je vais donc prendre la solution de tout passer en C++ , c'est compliqué mais bon si ça fonctionnne c'est le principal ;)
la solution de tout passer en C++ , c'est compliqué
Nan !!! Tu reprend le même fichier, tu change de nom, et tu met l'option qui va bien pour que le compilo traite du C++ et pas du C. N'IMPORTE QUEL programme C, à ma connaissance, doit pouvoir compiler en C++.
Tu rajoute juste l'include de la classe, et tu modifies les endrois où, du coup, tu utilises ta classe, et basta...
Mais si tu préfère tout passer en classe propres, je t'avoue, c'est toujours mieux !!!
Nan !!! Tu reprend le même fichier, tu change de nom, et tu met l'option qui va bien pour que le compilo traite du C++ et pas du C. N'IMPORTE QUEL programme C, à ma connaissance, doit pouvoir compiler en C++.
Tu rajoute juste l'include de la classe, et tu modifies les endrois où, du coup, tu utilises ta classe, et basta...
Mais si tu préfère tout passer en classe propres, je t'avoue, c'est toujours mieux !!!