2013-01-14 5 views
0

J'ai une instance de lasse1 et je veux l'utiliser dans une méthode de lasse2, cette méthode est la méthode statique, cela ne fonctionne tout simplement pas:comment puis-je utiliser une instance non statique dans une méthode statique en C++?

class Lasse2{ 
...... 
public : 
static void function(void); 
Lasse1* obj; 
........ 
}; 

Et maintenant, je veux l'utiliser comme:

void Lasse2::function(void){ 
obj->dosmt(); // this doesn't work 
......... 

aucune idée comment puis-je résoudre ce problème?

+12

Vous ne pouvez pas. C'est ce que signifie _static_. – SLaks

+1

Voulez-vous dire 'obj' être statique aussi? –

+0

Doit .. résister ... ne peut pas ... * Pourquoi * avez-vous * besoin * de le faire? – WhozCraig

Répondre

2

Si vous souhaitez accéder à un membre d'instance de votre classe, vous doit avez une instance de cette classe. Il n'y a pas moyen de contourner cela. Vos options sont les suivantes:

  1. Définissez obj comme membre statique. Faites-le si vous avez l'intention d'avoir un seul obj pour toutes les instances de cette classe.
  2. Supprimez static de function() pour qu'il devienne une méthode d'instance.

Si vous ne pouvez pas faire l'un ou l'autre, alors vous devez trouver un moyen de passer un pointeur d'instance à votre fonction. Par exemple, les API qui nécessitent un pointeur de fonction disposent souvent d'un mécanisme permettant de transmettre des données de taille pointeur à cette fonction lorsqu'elle est finalement appelée.

1

Changer votre méthode statique pour passer explicitement le pointeur d'objet:

static void function(Lasse1* obj) 
{ 
    obj->dosmt(); 
} 

Mais avant de vous faire, pensez à ce que vous êtes vraiment essayer de le faire (et même écrire une autre question si vous le souhaitez).

1

Vous avez besoin d'une instance de votre classe pour le retirer.

Créer une ou recevoir par d'autres moyens (argument de fonction, variable globale, classe variable statique, etc.)

0

SLaks dit le mieux: « Vous ne pouvez pas »

Voici pourquoi:

Lorsque vous déclarez une variable membre (non statique, voir obj ci-dessus), vous indiquez le compilateur que chaque objet de type Lassie2 contient un pointeur vers un Lassie1.

Lorsque vous déclarez une méthode statique, cela signifie qu'elle est indépendante de toutes les instances (les objets réels) de cette classe. Il ne fonctionne pas sur un objet.

donc à l'intérieur de Lasse2::function, il n'y a pas this, aucun objet Lassie2 pour vous d'obtenir le pointeur de obj.

Questions connexes