2010-03-22 6 views
21

Ich kann nicht über dieses Problem, das ich habe. Hier ist ein einfaches Beispiel:Statische Funktion Hilfe C++

class x 
{ 
    public: 
    void function(void); 

    private: 
    static void function2(void); 
}; 

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

static void function2(void) 
{ 
    //something 
} 

Ich bekomme Fehler, in denen sich über Funktion 2 als privat. Wenn ich es öffentlich mache (was ich nicht wirklich machen will), bekomme ich Fehler über einen undefinierten Verweis auf function2. Was mache ich falsch? Vielen Dank!

+0

Warum function2 mit exakt gleichen Signatur überlastet? –

Antwort

36
  1. Sie können keine Funktion Deklaration und Definition haben beide in einer Klasse. Verschieben Sie die Definitionen entweder aus der Klasse oder entfernen Sie die Deklarationen.

  2. Sie können eine Funktion mit einem void nicht als Parameter aufrufen. Das wird nur in der Deklaration verwendet.

  3. Die Funktionsdefinition für Funktion2 außerhalb der Klasse benötigt ein x :: -Qualifikationsmerkmal und static wird beim zweiten Mal nicht benötigt.


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

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

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

Es war, weil ich das zweite Mal statisch war. Mein Beispiel war schlecht, aber vielen Dank. – Alex

+0

Nur aus Neugier - was meinen Sie mit 1. Punkt? –

3

Sie müssen function2 mit

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

definieren, wie es mit x::function

Update war: Ja. Sie müssen die Klassenmethode nicht mit statisch markieren, wenn Sie sie definieren.

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

Das gibt mir diesen Fehler: Memberfunktion kann nicht deklariert werden, statische Verknüpfung zu haben. Habe ich anderswo einen Fehler gemacht? – Alex

+4

Unter g ++ - v4.7 scheint es so, als müssten Sie das Schlüsselwort "static" weglassen, wenn Sie die Funktion implementieren. –

Verwandte Themen