Variable membre non static dans une fonction membre static

cs_adrod Messages postés 7 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 20 février 2004 - 30 avril 2003 à 23:33
misterzinzin Messages postés 112 Date d'inscription vendredi 27 octobre 2000 Statut Membre Dernière intervention 26 janvier 2011 - 10 févr. 2005 à 16:04
J'ai une erreur du compilateur: Error C2597. Je suis allé sur msdn pour avoir plus de précision et ils me disent:

To access the nonstatic member, you must create an instance of the class and use a member-access operator (. or ->).

// Exemple avec l'erreur
class s1 { // in cpp file
static void func();
int i;
};

void s1::func()
{
i = 1; // C2597 here
}

Est-ce que quelqu'un pour me dire comment il faut faire exactement? Je ne comprend pas vraiment pourquoi cela fait une erreur. Si quelqu'un a une explication je suis preneur! Merci d'avance,
Adrod

6 réponses

cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
1 mai 2003 à 10:32
Ta méthode est une méthode statique et ton attribut est un attribut d'instance. Tu ne peux donc pas accéder depuis ta méthode à ton attribut. Pour corriger le problème, soit tu passes ta méthode en méthode d'instance, soit tu passes ton attribut en attribut statique.

Kaid - kaid.fr.st
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
2 mai 2003 à 03:49
Il y a 3 corrections possibles:

1.
class s1 { // in cpp file
void func();
int i;
};

void s1::func()
{
i =  1; // C2597 here
}



2.
class s1 { // in cpp file
void func();
static int i;
};

void s1::func()
{
i = 1; // C2597 here
}



3.
class s1 { // in cpp file
static void func();
static int i;
};

void s1::func()
{
i = 1; // C2597 here
}


Core Breaker :)
0
cs_adrod Messages postés 7 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 20 février 2004
3 mai 2003 à 00:16
En fait ma fonction doit être static donc il ne reste qu'une solution. Mais si je mets ma variable en static cela me met une erreur lors du "linking":
OperationsPixels.obj : error LNK2001: unresolved external symbol "private: static int COperPixels::coefficient" (?coefficient@COperPixels@@1HA)
"coefficient" étant la variable remplacant "i" que j'ai mis dans l'exemple et "COperPixels" étant la classe.
Y a t'il une autre solution?
Adrod
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
3 mai 2003 à 00:45
C'est nomal tu dois implénter ta variable coefficient comme ceci en dehors de la définition de la classe:

int COperPixels::coefficient= valeur_initiale;

Core Breaker :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_adrod Messages postés 7 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 20 février 2004
3 mai 2003 à 11:27
Merci beaucoup
Adrod
0
misterzinzin Messages postés 112 Date d'inscription vendredi 27 octobre 2000 Statut Membre Dernière intervention 26 janvier 2011 2
10 févr. 2005 à 16:04
heu une bete question... j'aimerais faire une liste de destination statique dans une classe..

et j'y arrive pas...

en fait dans ma classe j'ai:



class GestionTicket{

private:



public:

static char* DestinationValide[6];

add(Ticket t);

afficheTickets();

afficheTickets(char* destination);

sauveTickets(char* destination);

//ContainerMemoire ContainerTicket;

ContainerPersistantTexte ContainerTicket;

//ContainerPersistantBinaire ContainerTicket;

};



char* GestionTicket::DestinationValide={"bruxelles","liege","namur","arlon","hasselt","aachen"};



evidement... ca ne marche pas

on fait comment ???


moi, le seul, l'unique, ZinZin
0
Rejoignez-nous