2010-03-22 6 views
21

Je ne peux pas aller au-delà de cette question que j'ai. Voici un exemple simple:Fonction statique Aide C++

class x 
{ 
    public: 
    void function(void); 

    private: 
    static void function2(void); 
}; 

void x::function(void) 
{ 
    x::function2(void); 
} 

static void function2(void) 
{ 
    //something 
} 

Je reçois des erreurs dans lesquelles je me plains que la fonction2 soit privée. Si je le rend public (ce que je ne veux pas vraiment faire), j'obtiens des erreurs à propos d'une référence indéfinie à function2. Qu'est-ce que je fais mal? Je vous remercie!

+0

Pourquoi fonction2 surchargées avec la même signature exacte? –

Répondre

36
  1. Vous ne pouvez pas avoir une déclaration de fonction et la définition à la fois dans une classe. Déplacez les définitions hors de la classe ou supprimez les déclarations.

  2. Vous ne pouvez pas appeler une fonction avec un vide comme paramètre. Cela est utilisé uniquement dans la déclaration.

  3. La définition de fonction pour fonction2 si en dehors de la classe aura besoin d'un x :: qualificatif et statique n'est pas nécessaire la deuxième fois.


    class x 
    { 
     public: 
      void function(void); 
     private: 
      static void function2(void); 
    }; 

    void x::function(void) 
    { 
     x::function2(); 
    } 

    void x::function2(void) 
    { 
    } 
+0

C'était parce que j'avais de l'électricité statique la deuxième fois. Mon exemple était mauvais, mais merci beaucoup. – Alex

+0

Juste par curiosité - ce que vous avez signifié par 1er point? –

3

Vous devez définir function2 avec

static void x::function2 (void) 
{ 
    body 
} 

comme il était avec x::function

mise à jour: Oui. vous n'avez pas besoin de marquer la méthode de classe avec statique lors de la définition.

class x 
{ 
public: 
    void function(void); 

private: 
    static void function2(void); 
}; //end of class 

// here are definitions of members 
static void x::function(void) 
{ 
    x::function2(); 
} 
static void x::function2(void) 
{ 
//something 
} 
+2

Cela me donne cette erreur: ne peut pas déclarer la fonction membre ayant un lien statique. Ai-je fait une erreur ailleurs? Sous – Alex

+4

g ++ - v4.7, il vous semble _devez_ laisser le mot-clé « statique » lors de l'implémentation de la fonction. –