Utiliser un fichier .c dans mon programme avec QT designer

Utiliser un fichier .c dans mon programme avec QT designer - C++ - Programmation

Marsh Posté le 31-12-2004 à 14:41:04    

Bonjour,
 
Je souhaite utiliser des fonction qui sont dans un fichier .c. J'ai essayé d'insérer le header (.h) dans "include in declaration" ou "include in implementation". J'ai insérer le fichier .c en faisant project - add file.
 
Plus precisement, la compialtion se passe bien. Les fichiers se compilent separement (donc il trouve bien les prototypes dans le .h).
 
Au moment de linker les .o pr fr l'executable, la, on chope les undefined reference to "mafonction".
On a regarder el Makefile lors du linkage le fichier list.o est present (et donc a bien compiler...)
 
Je crée le Makefile avec qmake, puis je fais make.
J'ai toujours la même erreur : undefind reference to "mafonction()".
Est-ce que quelqu'un aurai la solution ?
 
Merci beaucoup.
Bonne fête!
 
David


Message édité par smilm le 31-12-2004 à 14:56:35
Reply

Marsh Posté le 31-12-2004 à 14:41:04   

Reply

Marsh Posté le 31-12-2004 à 18:18:10    

C'est parce que ton fichier C est compilé par un compilo C, et le reste en C++, non ? Si c'est le cas, dans ton fichier h, remplace:  

Code :
  1. prototype de mafonction()


par:

Code :
  1. #ifdef __cplusplus
  2. extern "C" {
  3. prototype de mafonction()
  4. }
  5. #endif


 
 
Attention: Je ne suis plus très sûr que ce soit __cplusplus qu'il faille utiliser pour détecter du code c++.  ..

Reply

Marsh Posté le 02-01-2005 à 15:41:20    

Merci beaucoup pour ta réponse. Cette fois-ci je compile mais les fonctions C qui modifient mes données renvoient n'importe quoi.
 
Je m'explique: Je recherche à faire une liste chainée d'éléments. Ces éléments contiennent un certain nombre de champs. Ce sont tous des char*. Ma liste d'éléments à une entête qui contient le nombre d'éléments.  
 
J'appelle dans mon programme C++, une fonction C qui modifie le header de la liste. Cette fonction appelle elle-même une fonction qui ajoute un élément dans la liste chainée.
 
Dans mon programme C++, je m'apperçois que le header a été bien modifié (ie: la mise à jour du nombre d'élément se fait correctement).
Par contre les champs de chacun des éléments de la liste chainée contiennent n'importe quoi... Or quand je compile mon .c indépendemment du programme C++ et que je test mes fonctions C, tout semble très bien se passer... Mes fonctions C semblent donc être corecte.
 
Avec ta méthode, si je fait ce que tu m'a dit pour toutes mes fonction C:

Code :
  1. * #ifdef __cplusplus
  2.     * extern "C" {
  3.     * prototype de mafonction()
  4.     * }
  5.     * #endif


 
J'ai des warnings avec les fonctions que j'utilise dans mon .c.
Que je fasse commme tu me l'as indiqué uniquement avec mes prototypes des fonctions qui seront utilisées en C++, ou que je  le fasse avec les prototype de toutes mes fonctions toutes les données sont invalides. Que faire ?
 
Merci beaucoup pour votre aide.
David
 
 

Reply

Marsh Posté le 03-01-2005 à 06:45:55    

Bon, déjà, tu peux mettre tout le contenu de ton fichier include dans le bloc extern "C" (c'est pour ça que je t'ai donné la version avec accolade). Tu peux regarder les fichiers include standards (/usr/include) pour te donner une idée (quoique chez moi, dans les include standards, il y a une macro qui donne:

Code :
  1. #define _BEGIN_STD_C extern "C" {
  2. #define _END_STD_C  }


 
 
D'autre part, Il va te falloir être plus explicite sur les erreurs et warnings que tu as. T'as qu'à balancer le code de la fonction C, le code C++ qui l'appelle, et les messages de Warning que tu obtiens.

Reply

Marsh Posté le 03-01-2005 à 09:05:25    

et puis les listes chainées ca existe en C++ : std::list<T>

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed