Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 sad

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