Ordre de compilation des classes

9sber Messages postés 28 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 14 septembre 2004 - 5 juil. 2004 à 14:59
9sber Messages postés 28 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 14 septembre 2004 - 6 juil. 2004 à 17:18
Comment s'assurer qu'une classe est compilée avant une autre?

Mon, pb est le suivant.
Je suis sous VC++. J'ai une classe "R" qui hérite d'une classe "A". mais à la compilation de la classe "R", mon compilo n'arrive pas à trouver le compilé de la classe "A", malgrè le include "A.h".

R.h : error C2504: 'A' : base class undefined

Lorsque je remplace entièrement le contenu de ces deux classes (à part l'héritage: class R:public A{...} ), l'erreur reste.

Need Any Help
Thank u
:approve)

7 réponses

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
5 juil. 2004 à 19:09
mets #include "A.h" dans le R.h ...
'R.h : error C2504: 'A' : base class undefined' -> on voit bien que c'est ds R.h que la classe A est inconnue.
a+ ;)
0
9sber Messages postés 28 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 14 septembre 2004
5 juil. 2004 à 19:40
Le #include y est déjà!
Le trucs, c'est que ça marchait avant.
Je n'ai apporté des modifs... pas mal.
Ca marche plus.
J'ai restauré l'ancienne version. Ca marche.
J'ai réintéger les classes A.h et R.h de l'ancienne version dans les nouvelles. Re, error C2504.
Je change le projet de dossier. Re same error.
Sous linux, ça compile bien.
Donc pour moi, l'erreur vient du complateur cl- de VC++6, je ne voit que cela?

Etes vous d'accord avec mon interprétation ou avez-vous une solution à mon pb?

C'est en résolvant les problèmes les plus tordus que l'on progresse
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
6 juil. 2004 à 02:42
ben non jpense pas mais bon...
fais build -> clean, et re essaie de compiler on sait jamais...
sinon copie colle ici le code de tes 4 fichiers (A.h, A.cpp, R.h et R.cpp) on va voir.
0
9sber Messages postés 28 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 14 septembre 2004
6 juil. 2004 à 11:13
build->clean, négatif.
so:

8-) 8-) 8-) 8-) 8-)
A.h
#ifndef A_H
#define A_H

#include "EU.h"
#include "STU.h"
#include "AT.h"

class EU;
class STU;
class AT;

//generic class for
class A{

public:
A();
~A();
virtual bool createAT(EUr* eu, STU* stu);
virtual bool freeAT(EU* eu, STU* stu);
virtual AT* find(EU* eu, STU* stu);
};
#endif //A_H

8-) 8-) 8-) 8-) 8-)
A.cpp
#include "A.h"

A::A(){}
A::~A(){}

bool A::createAT(EU* eu, STU* stu){
return false;}

bool A::freeAT(EU* eu, STU* stu){
return false;}

AT* A::find(EU* eu, STU* stu){
return NULL;}

8-) 8-) 8-) 8-) 8-)
R.h
#ifndef R_H
#define R_H

#include "A.h"
#include <qptrlist.h>
#include "AT.h"

class A;
class AT;
class EU;

class R: public QObject,public A,QPtrList {
Q_OBJECT
public:
R();
~R();

bool createAT(EU* eu, STU* stu);
bool freeAT(EU* eu, STU* stu);
AT* find(EU* eu, STU* stu);
};
#endif//R_H

8-) 8-) 8-) 8-) 8-)
R.cpp
#include "R.h"

R::R(){
setAutoDelete(true);}

R::~R(){}

bool R::createAT(EU* eu,STU* stu){
if((eu->name!=NULL)&&((eu->name!=NULL)){
AT *at0 = new AT(eu,stu)
append(at0);
return true;}
else return false}

bool R::freeAT(EU* eu, STU* stu){
AT* at0=0;
for(uint i=0;i<count();i++){
at0=at(i);
if(at0->eu->name=eu->name)&&(at0->stu->name=stu->name){
remove(at0);
return true;}
return false;}

AT* R::find(EU* eu, STU* stu){
AT* at0=0;
for(uint i=0;i<count();i++){
at0=at(i);
if(at0->eu->name=eu->name)&&(at0->stu->name=stu->name)
return at0;
return NULL;}

8-) 8-) 8-) 8-) 8-)

Voilà

Pour le moment, les classes EU et STU n'ont pour variables chacune qu'un QString, et la classe AT n'a elle qu'un EU et un STU.

:shy)
0

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

Posez votre question
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
6 juil. 2004 à 15:48
class R: public QObject,public A,QPtrList {
Q_OBJECT

c'est koi ta macro Q_OBJECT? essaie d'enlever la ligne la vu que bon... peut etre erreur de syntaxe ds le R.h qui te met une erreur qui n'a pas trop de lien.
sinon jvois pas trop trop ;)
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
6 juil. 2004 à 15:53
essaie d'enlever les déclarations
class A;
class AT;
class EU;

dans le R.h. ces classes ont été déclarées dans les autres .h.
comme ta classe R hérite de plsrs de ces classes, mieux vaut que le compilateur prenne les définitions de ces classes avec leurs membres.
0
9sber Messages postés 28 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 14 septembre 2004
6 juil. 2004 à 17:18
Ok, merci à toi cosmobob, mais j'ai résolu mon pb.
Ca ne venait en fait pas de là.

J'ai une autre classe UA qui est mon menu et dans laquelle j'avais mis:
#include "A.h"
#include "R.h"

Et mon erreur apparaissait lors de l'inclusion de R.h ici.
En la supprimant et en la remplaçant par:
#include "A.h"
class R;

ca fonctionne. Je ne comprends toujours pas pourkoi. Enfin bon. Merci quand même.
0
Rejoignez-nous