#1 Le 04/02/2013, à 17:55
- kboo
programmation c++ (retour aux bases avec les headers..)
Bonjour,
Je lag un peu pour reprendre le C++ avec les fichiers headers:
J'ai un fichier man.cpp qui contient:
#include <iostream>
#include "test.h"
using namespace std;
int main(void){
cout << "coucou" << endl;
toto();
return 0;
}
le fichier test.h contient:
void toto(void);
et le fichier test.cpp contient:
#include <iostream>
#include "test.h"
using namespace std;
void toto(void){
cout << "toto" << endl;
}
et j'obtiens :
/tmp/ccyii0h7.o: In function `main':
man.cpp:(.text+0x21): undefined reference to `toto()'
collect2: ld returned 1 exit status
Je ne vois pas ce qui cloche?! et si je fais un horrible #include "test.cpp" ça marche... Help!!
merci beaucoup!! je lag
Hors ligne
#2 Le 04/02/2013, à 18:13
- pingouinux
Re : programmation c++ (retour aux bases avec les headers..)
Bonjour,
Chez moi ça marche.
$ g++ man.cpp test.cpp
$ ./a.out
coucou
toto
Hors ligne
#3 Le 04/02/2013, à 18:46
- Braun
Re : programmation c++ (retour aux bases avec les headers..)
Bonjour,
Excuse moi, mais je nage complètement:
L'objectif est de compiler quelques objets puis de les linker sous un nom global.
J'admets le fichier man.cpp qui contient le shell "main()" et donc a besoin du modèle de la fonction toto(), i.e. test.h.
Par contre dans le fichier test.cpp je ne vois pas à quoi sert le modèle de toto puisque toto y est défini.
Ceci mis à part si tu ne compiles pas tout ensemble (ce que fait bien pingouinux et mal ton horrible #include) ou mieux d'abord tous les objets je ne vois pas comment le link edit peut s'y retrouver.
Hors ligne
#4 Le 05/02/2013, à 00:02
- ssdg
Re : programmation c++ (retour aux bases avec les headers..)
Pour test.cpp et test.h, je dirais (sans trop aller chercher dans des souvenirs vieux de 5 ans au minimum):
Cela permet de vérifier qu'entre ce que tu déclare et ce que tu implémente, il n'y a pas de différence.
Pour le problème de notre ami:
s'il compile chaque fichier indépendament, il faut qu'il utilise l'option -c au moment de la compilation. (mais du coup, le binaire executable devra être réalisé lors d'une seconde étape.
s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.
Hors ligne
#5 Le 05/02/2013, à 15:28
- kboo
Re : programmation c++ (retour aux bases avec les headers..)
Merci pour toutes ces bonnes info,
en compilant avec "g++ man.cpp test.cpp" ça marche nickel!
Sinon j'ai été plus loin et grâce au tutoriel sur le plugin CDT (Eclipse), j'ai pu pas mal avancer :
http://help.eclipse.org/helios/index.js … _basic.htm
Hors ligne