Bon, ben si tu ne veux pas inclure ton MaClasseA.h dans tes autres sources, tu peux essayer de mettre cette variable dans une autre classe (p.ex. ClassePubliqueA, déclarée dans un autre header) dont hérite MaClasseA. Ainsi tu inclus cet header dans ton second fichier (MaClasseOption.h). Après tu as de toute façon besoin d'au moins un pointeur sur l'instance de MyClasseA pour accéder à sa partie "ClassePubliqueA".
Exemple (non testé):
ClassePublique.h
1 2 3 4 5
| class ClassePublic {
public:
int MaVariable;
ClassePublic() : MaVariable(0) {};
}; |
MaClasseA.h (Exemple d'initialisation de MaVariable à 10)
1 2 3 4
| #include "ClassePublique.h"
class MaClasseA : public ClassePublique {
// Ton code sauf MaVariable puisque déjà déclarée dans ClassePublique
}; |
MaClasseOption.h (accès à MaVariable depuis un pointer)
1 2 3 4 5 6
| #include "ClassePublique.h"
class MaClasseOption {
void AfficheMaVariable(ClassePublique* A) {
if (A) cerr<<A->MaVariable<<endl;
}
}; |
Tu appelles ainsi ta classe MaClasseOption avec un pointeur sur MaClasseA mais sans que MaClasseOption ne connaisse la définition de MaClasseA:
1 2 3 4 5 6 7 8 9 10 11 12
|
#include "MaClasseA.h"
#include "MaClasseOption.h"
void main() {
MaClasseA *toto=new MaClasseA();
if (toto) {
toto->MaVariable=10; // Donne une valeur à MaVariable
MaClasseOption test;
test.AfficheMaVariable(toto); // Affiche la valeur (10)
}
delete toto; toto=NULL;
} |
Je ne sais pas si c'est très clair...
Si tu peux te contenter d'une seule instance de ta variable MaVariable partagée par tous tes objets, alors tu peux simplement la déclarer comme statique. Ainsi tu peux y accéder juste en déclarant ClassePublique et sans pointeur sur MaClasseA:
ClassePublique.h
1 2 3 4
| class ClassePublic {
public:
static int MaVariable;
}; |
ClassePublique.cpp
ClassePublique::MaVariable=0; // Initialise la variable au démarrage de l'application
MaClasseA.h est identique
1 2 3 4 5 6 7 8 9 10 11
| #include "MaClasseA.h"
#include "MaClasseOption.h"
void main() {
MaClasseA *toto=new MaClasseA();
if (toto) {
toto->MaVariable=10;
MaClasseOption test;
test.AfficheMaVariable(); // Plus besoin du pointeur
}
delete toto; toto=NULL;
} |
En fait, la variable appartient à la classe et pas à une instance. Tu pourrais donc même écrire:
1 2 3 4 5 6
| #include "ClassePublique.h"
void main() {
MaClasseOption test;
ClassePublique::MaVariable=10; // Donne une valeur à MaVariable (globale)
test.AfficheMaVariable(); // Affiche la valeur (10)
} |
Partager