OVH Cloud OVH Cloud

déclaration de classes

4 réponses
Avatar
Adrien Constant
Bonjour,

voilà j'ai un petit problème de déclarations :


_file1.h_:
#ifndef _FILE1_H
#define _FILE1_H

#include "file2.h" // pour class World
class Core
{
public:
class Hello {
public:
Hello(){};
~Hello(){};
Bla(){};
World *world;
};
};
#endif


_file2.h_:
#ifndef _FILE2_H
#define _FILE2_H

#include "file1.h" // pour class Core::Hello
class World
{
public:
World(){};
World(Core::Hello *ptr){};
~World(){};
};

#endif

Et forcémen, il me dit:
file2.h: Core was not declared in this scope

Si je mets "class Core; class Core::Hello;" il n'aime pas non plus.

Si quelqu'un sait comment éviter cela...

Merci.

Adrien

4 réponses

Avatar
Vincent Richard

Et forcémen, il me dit:
file2.h: Core was not declared in this scope

Si je mets "class Core; class Core::Hello;" il n'aime pas non plus.

Si quelqu'un sait comment éviter cela...


Fais l'inverse. Au lieu de :

#include "file2.h" // pour class World

écris :

class World;

Dans file1.cpp, n'oublie pas le #include "file2.h" si tu accèdes à des
fonctions/variables membres de la classe World...

Vincent

--
vmime, une bibliothèque C++ sous licence GPL pour parser et générer
des messages au format MIME : http://www.sourceforge.net/projects/vmime/

Avatar
Adrien Constant
Oui en fait ce que j'ai "oublié" de préciser, c'est que la class que je
veux utiliser n'est pas en fait World mais qqch::World... ce qui fait
que le problème est le meme dans les deux sens :/

Vincent Richard wrote:


Et forcémen, il me dit:
file2.h: Core was not declared in this scope

Si je mets "class Core; class Core::Hello;" il n'aime pas non plus.

Si quelqu'un sait comment éviter cela...



Fais l'inverse. Au lieu de :

#include "file2.h" // pour class World

écris :

class World;

Dans file1.cpp, n'oublie pas le #include "file2.h" si tu accèdes à des
fonctions/variables membres de la classe World...

Vincent




Avatar
Vincent Richard

Oui en fait ce que j'ai "oublié" de préciser, c'est que la class que je
veux utiliser n'est pas en fait World mais qqch::World... ce qui fait
que le problème est le meme dans les deux sens :/


Je me disais aussi... :-)

Je ne sais pas trop ce que tu veux faire (pas assez de précisions), mais
tu peux peut-être t'inspirer de ce modèle :

// IAB.hpp
class IA
{
protected:

IA() { }
virtual ~IA() { }

public:

class S { };
};

class IB
{
protected:

IB() { }
virtual ~IB() { }

public:

class S { };
};


// A.hpp
#include "IAB.hpp"

class A : public IA // <-- ta classe "Hello"
{
public:

class S : public IA::S { }; // éventuellement

IB::S* ptr;
};


// B.hpp
#include "IAB.hpp"

class B : public IB // <-- ta classe "World"
{
public:

class S : public IB::S { }; // éventuellement

B(IA::S* ptr) { }
};


Vincent

--
vmime, une bibliothèque C++ sous licence GPL pour parser et générer
des messages au format MIME : http://www.sourceforge.net/projects/vmime/

Avatar
plindenbaum
Adrien Constant wrote in message news:<3f9a8e3d$0$27594$...
Bonjour,

voilà j'ai un petit problème de déclarations :

(...)

Et forcémen, il me dit:
file2.h: Core was not declared in this scope
Si je mets "class Core; class Core::Hello;" il n'aime pas non plus.
Si quelqu'un sait comment éviter cela...


Salut,
Tu peux declarer le nom de tes classes dans file2 sans a avoir a les definir.

Ca donne:

#ifndef _FILE2_H
#define _FILE2_H

class Core;
class Core::Hello;

class World
{
public:
World(){};
World(Core::Hello *ptr){};
~World(){};
};

#endif

Pierre