[C/C++] Comment mélanger C et C++ ?

Résolu/Fermé
Delta9_THC Messages postés 65 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 26 avril 2009 - 16 oct. 2006 à 21:54
Delta9_THC Messages postés 65 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 26 avril 2009 - 17 oct. 2006 à 18:49
Salut à tous,

Voilà j'ai 2 fichiers qui gèrent les liste chainées simples (ListeSimple.c et ListeSimple.h) écrits en C "pur". Lorsque je fais une directive include dans un fichier test.C (en C++) et que j'essaie d'appeler une fonction implémentée dans le fichier ListeSimple.c la compilation me génère une erreur :

test.o : Dans la fonction "main()":/[...]/src/ListeMotsTries.C:14: référence indéfinie vers « sll_new()   »
test.o : Dans la fonction "main()":/[...]/src/ListeMotsTries.C:26: référence indéfinie vers « sll_insert(sll*, void*)»


Alors que les fonctions en question "sll_new()" et "sll_insert()" sont bien présentes dans le fichier !

Je galère sur cette erreur (toute bête j'espère) depuis un moment et je vois pas d'où ça peut venir, à part une subtilité à faire pour mélanger C et C++.

Que ceux qui ont une idée m'apporte un peu d'espoir svp :o)

1 réponse

mamiemando Messages postés 33073 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 avril 2024 7 748
17 oct. 2006 à 09:06
1) Essaye dans tes fichiers c++ de mettre :
extern "C"{
#include "monheader.h"
}

2) Si tu utilises un Makefile, vérifie qu'il correct (ie que tu linkes bien tous les fichiers compilés pour générer l'éxecutable final).

3) En général un header s'écrit sous la forme :
#ifndef VERROU
#define VERROU

//....

#endif

Vérifie que le verrou du .h que tu aimerais inclure n'a pas été défini dans un autre fichier, par exemple suite à un copier coller malheureux.

Bonne chance
1
Delta9_THC Messages postés 65 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 26 avril 2009 2
17 oct. 2006 à 18:49
Ok merci j'en suis arrivé à la même conclusion que toi à propos de la directive "extend..." grâce à un autre forum et ça venait bien de là.
Dans tous les cas merci tu as tapé juste :o)
0