Compile à plusieurs fichiers

Résolu
cs_ntrvdonett Messages postés 20 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 4 janvier 2009 - 3 janv. 2009 à 23:15
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 4 janv. 2009 à 13:59
Bonsoir,

Au risque de faire rire, j'ai un problème de compilation en mettant une class dans un fichier à part, je rame depuis deux heure pour rien, et j'ai pas trouver ma solution sur le site, pourtant....

j'ai deux fichiers C++ sous linux :

test_main.cpp :

#include

using namespace std;

extern class bonjour;

int main (){
    bonjour b("bonjour"); 
}

test_class.cpp :

#include

using namespace std;

class bonjour{
public:
    bonjour(string text){ // constructeur
        cout << text << "\n";
    }
};

mon Makefile :

test: test_main.o test_class.o
    g++ -o test test_main.o test_class.o

test_main.o: test_main.cpp
    g++ -o test_main.o -c test_main.cpp

test_class.o: test_class.cpp
    g++ -o test_class.o -c test_class.cpp

g++ me répond :
*test_main.cpp:5: error: ISO C++ forbids declaration of ‘bonjour’ with no type

Quelqu'un peut-il m'aider ?

Merci

FAB (On ne peut pas aller au delà des choix qu'on ne comprend pas)

5 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
3 janv. 2009 à 23:40
main.cpp:

#include
using namespace std;

#include "test_class.h"

int main () {
    bonjour b("bonjour");
}
___________________________________________________________________
test_class.h:

#include
using namespace std;

class bonjour{
public:
    bonjour(string text);
};
___________________________________________________________________
test_class.cpp:

#include "test_class.h"

bonjour::bonjour(string text) {
    cout << text << "\n";
}
3
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
3 janv. 2009 à 23:41
Bonsoir,

Il faut que les prototypages de toutes les méthodes de bonjour soient connu de main.

Il te faut donc 2 fichiers , test_class.h et test class.cpp :

test_class.h

class bonjour{
public:
    bonjour(string text);
};

test_class.cpp

bonjour:bonjour(string text)
{
cout << text << "\n";
}

et dans test_main.cpp, remplace extern class bonjour par #include "test_class.h"

Tu pourrais aussi mettre tout le code de bonjour dans test_class.h.
3
cs_ntrvdonett Messages postés 20 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 4 janvier 2009
4 janv. 2009 à 12:47
Merci pour vos réponses, ça marche mieux comme ça, je vais pouvoir transposer sur mon projet !!

FAB (On ne peut pas aller au delà des choix qu'on ne comprend pas)
0
cs_ntrvdonett Messages postés 20 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 4 janvier 2009
4 janv. 2009 à 12:55
Juste encore une petite question, comment présenter seulement la partie public de la classe dans test_class.h et déclarer ailleurs la partie privée ? De manière à ce que l'utilisateur futur de la classe ne voit que se qu'il peut utiliser ?

Merci

FAB (On ne peut pas aller au delà des choix qu'on ne comprend pas)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
4 janv. 2009 à 13:59
Peut-être comme ça : en créant un deuxième fichier .h, utilisé uniquement par le .cpp de la classe.

#include
using namespace std;

class bonjour{
private:
    void FonctionSecrete(int a, short z);
};
0
Rejoignez-nous