2009-09-30 6 views
-3

Comment puis-je accéder à des types de classe obect dans une fonction de membre privé statiquement déclaré ?:accéder à des types d'objets de classe C++

class Y 
{ 
.. 
private: 
    friend class X; 
    X *myX; 
}; 
class X 
{ 
public: 
     friend class Y; 
private: 
    static int foo(const char * const key); 
    Y *myX; 
}; 


int X::foo(const char * const key) 
{ 
    X *myX = NULL; // illegal. 
} 

fonte statique et les références de la distribution statiques ne fonctionnent pas comme je l'avais prévu.

+1

Vous devez formater votre code de manière lisible. – sth

+0

... et acceptez certaines des réponses à vos autres questions. –

+0

est 10 minutes la coupure pour faire ces choses? =/ – user40120

Répondre

1

Si maxSize est un membre normal de la classe X, vous ne pouvez pas y accéder de cette façon. Vous devrez le passer comme un autre paramètre à la fonction. Si maxSize est un membre statique de la classe, alors ce code devrait fonctionner.

Si ce n'était pas ce que vous demandiez, alors vous devez clarifier votre question et peut-être ajouter plus de code montrant ce que vous rencontrez des problèmes.


Edit:

Dans votre nouvel exemple, la ligne que vous avez marqué « illégal » serait en fait compiler la façon dont vous l'avez écrit. (Il est déclaré un pointeur X local nommé myX qui existe seulement à l'intérieur de cette fonction.)

Mais je devine que vous voulais dire:

int X::foo(const char * const key) 
{ 
    myX = NULL; 
} 

Et ce serait un échec parce que myX n'est pas une variable statique. Les fonctions statiques ne peuvent pas accéder aux variables membres normales. Ils peuvent uniquement accéder aux variables statiques.

Vous devrez réviser votre conception:

  • Soit faire myX un membre statique de X si cela est approprié dans votre programme.
  • Ou de créer X::foo une fonction de membre non statique.
  • Ou ajoutez un autre paramètre à X::foo à travers lequel vous pouvez accéder à myX. Il y aurait plusieurs façons selon la façon dont vous voulez concevoir les choses. Voici un exemple: int X::foo(const char * const key, X *& theXpointer)
0

Vous ne pouvez pas accéder aux données de membre dans une fonction statique. Il n'a accès qu'aux données statiques et autres fonctions statiques. Si vous avez besoin d'une fonction de classe pour agir sur les membres d'un objet, vous ne devez pas déclarer cette fonction statique, ou vous devez transmettre cet objet en tant que paramètre à la fonction statique.

0

Je ne suis pas sûr de ce que vous voulez dire lorsque vous dites "types d'objets de classe d'accès". Votre code tel que vous l'avez écrit vous permettra d'utiliser le type X dans la fonction statique X :: foo (bien sûr, vous devez lui renvoyer une valeur puisque vous avez déclaré qu'il retourne un int). Comme vous l'avez écrit, vous déclarez un pointeur sur une instance de X et à partir de votre code, je ne suis pas sûr si c'est ce que vous avez prévu ou ce que vous ferez avec ce pointeur.

Questions connexes