[C++] Différents fichiers sources

ReBonjour, dans mon projet, je dispose d’un fichier main.cpp qui contient la fonction main et les déclarations de classe.

Je pensais mettre, dans un fichier fonctions.cpp les fonctions associées aux classes du fichier main.cpp et aux variables qui sont dans la fonction main, mais cependant, le compilateur m’indique que ni ces variables ni cette classe n’ont été déclarés !!!

Comment faire ?

Merci de votre aide

NC

PS : une autre question tant qu’on y est :slight_smile: : J’ai un objet obj1 avec une fonction membre fct et j’aimerai que cette fonction puisse aller agir sur des variables publiques d’un objet obj2 n’appartenant pas à la meme classe. Comment faire ?

Compilation séparée.

Il faut commencer par compiler les fichers et ensuite faire l’édition des liens.

fichiers requis:

main.c -> ton prog principal
fonction.c -> avec le code de tes fonctions
fonction.h -> avec les declarations des fonctions

si par exemple tu as une fonction:

 void toto(int truc)
{
...
}

definie dans fonction. c, dans ton fonction.h tu dois avoir ceci:

void toto(int truc);

tu dois faire ceci pour toute tes fonctions.

ensuite dans ton main.c tu dois inclure fonction.h, tu rajoutes ceci au début de ton fichier:


#include "fonction.h"

Enfin pour compiler:

gcc -c fonction.c main.c

Si tout se passe bien, tu auras 2 fichiers . o de créés: fonction.o et main.o, pour terminer tu fais l’edition des liens:

gcc -o ton_prog fonction.o main.o

Et là tu devrais avoir ton exécutable ton_prog.

plus d’infos: ds un moteur de recherche avec pour recherche: C compilation séparée

Ok, mais j’utilise dev c++, pas gcc, et mes fichiers sources sont regroupés au sein d’un projet. Est-ce comme ca que je dois faire ?

hum, je ne connais pas dev c++.

En faisant l’include dans le main.c et en faisant “build”, est- ce que ça compile ?

Ben, en fait, dans devc++, on appuie sur f9 et ca compile tout seul(:)) et comme je débute avec ce logiciel, je n’en connais que peu les possibilités :frowning:

tu as testé comme je t’ai dit précédemment: rajoute #include “fonction.h” dans main.c ? (en ayant bien sur créé et complété fonction.h comme je te l’ai expliqué)

Sous dev c++, il me semble qu’il faut ouvrir un projet pour faire comprendre au compilateur qu’il s’agit d’une compilation separée (sinon il ne va pas chercher les headers où il faut). Mais c’est a verifier.

Apparement il est dans un projet

J’ai essayé ce que vous m’avez dit, mais maintenant, ca m’indique :
multiple definition of `class1::fct1()’

bah alors ? c’est simplement que tu as défini plusieur fois la fonction :neutre:

Ben non :frowning: j’ai bien vérifié

as tu moyen de nous montrer les sources de tes différents fichiers ?


Main.cpp :

#include <iostream>
#include <cstdlib>
#include <windows.h>
#ifndef _HEADER_H_ 
#include "header.h" 
#endif
using namespace std;

int n;
main(){
n=5;
obj1 a;
a.fct1();

}

FONCTIONS.CPP:
int obj1::fct1() {
/*.... du code ... */

}

HEADER.H:
class obj1{
private:
double cz;
int k;
public:
int fct1();

};


et dans fonctions.cpp tu inclus header.h?

Le ifndef, c’est pas dans les fichiers c, c’est dans les entêtes.

Chaque .h doit ressembler à ça :

#ifndef __MACHIN_H__
# define __MACHIN_H__
 ...
#endif