PB, UN PEU D'AIDE SVP!!!! [Résolu]

Signaler
Messages postés
57
Date d'inscription
mardi 11 mars 2003
Statut
Membre
Dernière intervention
24 avril 2013
-
Messages postés
57
Date d'inscription
mardi 11 mars 2003
Statut
Membre
Dernière intervention
24 avril 2013
-
Bonjour à tous,

j'ai un soucis avec un projet que je suis en train de développer...
Je commence à peter un cable, et je sais pas si c'est une erreur évidente que j'arrive pas à voir, ou si ca peut marcher définitivement...

Donc en gros mon code donne ca : j'ai deux classes

COneFactorCopula(const double correlation,
double maximum = 5.0,
int integrationSteps = 50,
double minimum = 5.0) {.....}

J'ai une seconde classe, qui hérite en publique de la première :

class COneFactorGaussianCopula : public COneFactorCopula {
public :

COneFactorGaussianCopula(double correlation,
double maximum,
unsigned int integrationStep = 50) :
COneFactorCopula(correlation,maximum, integrationSteps) {}

...

J'ai utilisé l'héritage, car j'ai des fonctions virtuelles pures et d'autres non, et je veux qu'elle fonctionne au cas où j'aurai un autre objet similaire à COneFactorGausianCopula qui heriterait aussi de COneFactorCopula (à titre d'exemple, on pourrait imaginer un COneFactorStudentCopula... enfin bref)
Ensuite j'ai une autre classe CCalc qui prend en argument et qui utilise un COneFactorCopula dans son constructeur...

Finalement j'ai un dernier fichier, dans lequel je souhaite utiliser ce CCalc, donc dans un premier temps je fais un include de mon CCalc, et aussi de COneFactorGaussianCopula

Et là, c'est le drame... j'ai trois erreurs avant toute autre chose :

COneFactorCopula : class type redefinition
COneFactorCopula : base class undefined
COneFactorGaussianCopula : illegal member initialization : COneFactorCopula is not a base or a member

Donc pour les premières, les fichier CCalc et oneFactorGaussianCopula contiennent les .h de COneFactorCopula... donc en incluant ces deux fichiers il y a un soucis... mais dans ce cas là, comment faire....
car en incluant juste CCalc, j'ai pas acces à mon objet COneFacotrGaussianCopula..

Mais pour le reste je vois pas ..

Si quelqu'un peut m'aider, ce serait vraiement genial!!!!!

Merci d'avance

4 réponses

Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
As-tu mis une guarde dans chacun de tes fichiers .hh ?

Ex:
#ifndef CONEFFACTORGAUSSIANCOPULA_HH_
# define CONEFFACTORGAUSSIANCOPULA_HH_

class COneFactorCopula
{
public:
  //Code de COneFactorCopula... etc
};

#endif /* !CONEFFACTORGAUSSIANCOPULA_HH_ */


_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
57
Date d'inscription
mardi 11 mars 2003
Statut
Membre
Dernière intervention
24 avril 2013

Euh non... et je viens de le faire pour les trois classes concernées et ça marche.... hehe

Merci beaucoup... c'etait donc un truc évident...
D'ailleurs, tu peux m'expliquer pourquoi c'est nécessaire?

En tout cas merci encore...

Peupeu
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
Une garde garantie qu'un header ne sera inclus qu'une seule et unique fois.
Si tu fais ceci:

#include "pouet.hh"
#include "pouet.hh"
#include "pouet.hh"
#include "pouet.hh"

Alors pouet.hh ne sera inclus qu'une seule fois si il y a une garde. Mon exemple peut paraître débile, mais c'est un cas qui arrive tout le temps, mais qui est plus subtile.
Par exemple quand tu fais un #include à de nombreux endroits, tu n'as pas de souci. C'est parce qu'il y a une garde sur ce fichier.

Techniquement, tu inclus le fichier, et tu dis que tu l'as inclus (via #define). La prochaine fois que tu veux inclure ce fichier, tu vas regarder via #ifndef, si le define a déjà été fait. Si celui ci a déjà été effectué, alors tu ne l'inclus pas une deuxième fois.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
57
Date d'inscription
mardi 11 mars 2003
Statut
Membre
Dernière intervention
24 avril 2013

Ok j'ai compris... merci pour ton explication...