OVH Cloud OVH Cloud

Membre static d'un classe

4 réponses
Avatar
Remi Voisin
Bonjour

J'ai une fonction avec une donnée membre statique :

Maclasse
{
public:
static int z;

//... et le reste
}

Je veux l'utiliser dans le programme principal comme ça

Maclasse::z = 1;

Mais à l'édition de lien ça ne passe pas, il me dit
[Lieur Erreur] Unresolved external 'Maclasse::z' .......

Je ne peux accéder à un membre statique que dans une fonction membre de la
classe ?

Merci.

--
R. VOISIN
(Enlevez "oulala-" pour m'écrire.)

4 réponses

Avatar
Zouplaz
Remi Voisin - :

Bonjour

J'ai une fonction avec une donnée membre statique :

Maclasse
{
public:
static int z;

//... et le reste
}

Je veux l'utiliser dans le programme principal comme ça

Maclasse::z = 1;

Mais à l'édition de lien ça ne passe pas, il me dit
[Lieur Erreur] Unresolved external 'Maclasse::z' .......

Je ne peux accéder à un membre statique que dans une fonction membre
de la classe ?

Merci.



Non, si tu définis Maclasse dans maclasse.h alors tu ajoutes en entête
de maclasse.cpp

int Maclasse::z;

puis le reste du code (les méthodes de ta classe).

Avatar
Christophe Lephay
Remi Voisin wrote:
J'ai une fonction avec une donnée membre statique :

Maclasse
{
public:
static int z;

//... et le reste
}

Je veux l'utiliser dans le programme principal comme ça

Maclasse::z = 1;

Mais à l'édition de lien ça ne passe pas, il me dit
[Lieur Erreur] Unresolved external 'Maclasse::z' .......

Je ne peux accéder à un membre statique que dans une fonction membre
de la classe ?


Je pense que c'était :

class Maclasse...

Si ta donnée est publique, tu peux très bien écrire par la suite :

void fonction() {
...
Maclasse::z = 1;
...
}

Je crois que l'erreur que tu obtiens est liée au fait que tu délares
Maclasse::z mais que tu ne la définis pas. Il te faut écrire dans
Maclasse.cpp (ou quel que soit le nom du fichier contenant l'implémentation
de Maclasse) :

Maclasse::z;

Ou alors à la place, en l'initialisant dans la foulée :

Maclasse::z = 0; // ou toute autre valeur

Chris

Avatar
Remi Voisin
Bonjour

Non, si tu définis Maclasse dans maclasse.h
oui c'est ça, la classe déclarée dans un fichier .h, les fonctions

membresdéfinies dans un fichier .cpp
alors tu ajoutes en entête de maclasse.cpp
int Maclasse::z;


Ah oui ça marche, je n'avais pas compris qu'il fallait redéclarer z dans le
fichier .cpp. Je n'avais vu ça nul part.
Merci.
--
R. VOISIN
(Enlevez "oulala-" pour m'écrire.)

Avatar
Remi Voisin
Bonjour

Je pense que c'était
class Maclasse...


Oui j'ai bien le mot clé class, je l'ai oublié dans mon message.

Je crois que l'erreur que tu obtiens est liée au fait que tu délares
Maclasse::z mais que tu ne la définis pas. Il te faut écrire dans
Maclasse.cpp (ou quel que soit le nom du fichier contenant l'implémentation
de Maclasse) :

Maclasse::z;
Exactement, mes doc sur le C++ sont pas récentes, 1989 pour la plus

complète, mais depuis il y a eu des changements ou bien des ouvrages de
découverte, et je n'avais pas compris cette définition des variables
statiques.

Merci.
--
R. VOISIN
(Enlevez "oulala-" pour m'écrire.)