OVH Cloud OVH Cloud

Question sur les include

4 réponses
Avatar
julien
La solution est peut être très simple (donc peut être question stupide..).

Je cherche à faire de facon elegante ceci:
Voila je fais souvent deux classes. Une classe objetToto, et une class
managerObjetToto,


*****dans "objetToto.h"******

#include "managerObjetToto.h"

class objetToto
{
private:
static managerObjetToto _mot
public:
objetToto():
virtual ~objetToto();
}
//----------------------------------------
******dans "managerObjetToto.h"*****

#include "objetToto.h"
#include <vector>

class managerObjetToto
{
private:
static std::vector<objetToto> _objectTotoTab;
public:
managerObjetToto():
virtual ~managerObjetToto();
}



Comme "managerObjetToto.h" inclue "objetToto.h" et que "objetToto.h"
inclue "managerObjetToto.h" ca merde à la compilation.

Donc est ce qu'il y a une maniére élégante de faire ca (j'ai plusieurs
solutions, mais c'est du bidouillage je trouve, comme en déclarant la
class avant, en passant par les cpp, ou en utilisant une class parent et
en faisant un static_cast).

merci

4 réponses

Avatar
Jeremie Fouche
julien a écrit dans le message :
41162ffa$0$9761$
La solution est peut être très simple (donc peut être question stupide..).

Je cherche à faire de facon elegante ceci:
Voila je fais souvent deux classes. Une classe objetToto, et une class
managerObjetToto,


*****dans "objetToto.h"******

// #include "managerObjetToto.h" A SUPPRIMER

class managerObjetToto;

class objetToto
{
private:
static managerObjetToto _mot
public:
objetToto():
virtual ~objetToto();
}
file://----------------------------------------
******dans "managerObjetToto.h"*****



// #include "objetToto.h" A SUPPRIMER
class objetToto;

#include <vector>

class managerObjetToto
{
private:
static std::vector<objetToto> _objectTotoTab;
public:
managerObjetToto():
virtual ~managerObjetToto();
}


--
Jérémie

Avatar
julien
Jeremie Fouche wrote:
julien a écrit dans le message :
41162ffa$0$9761$

La solution est peut être très simple (donc peut être question stupide..).

Je cherche à faire de facon elegante ceci:
Voila je fais souvent deux classes. Une classe objetToto, et une class
managerObjetToto,


*****dans "objetToto.h"******



// #include "managerObjetToto.h" A SUPPRIMER
class managerObjetToto;


class objetToto
{
private:
static managerObjetToto _mot
public:
objetToto():
virtual ~objetToto();
}
file://----------------------------------------
******dans "managerObjetToto.h"*****




// #include "objetToto.h" A SUPPRIMER
class objetToto;


#include <vector>

class managerObjetToto
{
private:
static std::vector<objetToto> _objectTotoTab;
public:
managerObjetToto():
virtual ~managerObjetToto();
}



--
Jérémie



merci donc il y a pas mieux, ok.

PS: si je supprime lrs deux include ca va être dur pour le compilo.


Avatar
Jeremie Fouche
julien a écrit dans le message :
411a3518$0$31071$

[...]

merci donc il y a pas mieux, ok.


heu, peut etre, mais je ne connais pas.

PS: si je supprime lrs deux include ca va être dur pour le compilo.


Normallement non, sauf si tu implementes le code dans la declaration de tes
2 classes. Mais si tu fonctionnes avec separation de la declaration
fichier h ) et de l'implementation ( fichier cpp ), ca ne pose pas de
probleme :

exemple (non testé) :

[Fichier : a.h]
#ifndef A_H
#define A_H

class B; // on informe l'existence d'une classe B
class A
{
...

B m_b;
};

#endif // A_H

[Fichier b.h]
#ifndef B_H
#define B_H

class A; // on informe l'existence d'une classe A
class B
{
...

A m_a;
};

#endif // B_H

[Fichier : A.cpp]
#include "a.h"
#include "b.h"

// iumplementation de la classe A

[Fichier : B.cpp]
#include "b.h"
#include "a.h"

// iumplementation de la classe B


--
Jérémie

Avatar
drkm
"Jeremie Fouche" writes:

julien a écrit dans le message :
41162ffa$0$9761$

*****dans "objetToto.h"******


// #include "managerObjetToto.h" A SUPPRIMER
class managerObjetToto;

class objetToto
{
private:
static managerObjetToto _mot
public:
objetToto():
virtual ~objetToto();
}

******dans "managerObjetToto.h"*****


// #include "objetToto.h" A SUPPRIMER
class objetToto;

#include <vector>

class managerObjetToto
{
private:
static std::vector<objetToto> _objectTotoTab;
public:
managerObjetToto():
virtual ~managerObjetToto();
}



Je m'appraitais à répondre que l'on avait besoin de la définition du
type pour déclarer un champ ou instancier std::vector<>. J'ai fait un
petit test, pour inclure la sortie de mon compilo, et je me suis rendu
compte que cela passait lorsque ces champs étaient statiques.

Quelle est dans ce contexte l'influence de « static » ?

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html