2016-06-30 11 views
-1

Ich habe versucht, eine statische Elementvariable mit einer Mitgliedsinitialisierungsliste zu initialisieren. Aber ich habe Fehler wieKönnen statische Elementvariablen über die Elementinitialisierungsliste initialisiert werden?

statische Variable kann nicht

Zum Beispiel über Konstruktor initialisiert wird, meine Klasse sample hat eine statische Membervariable y vom Typ int. Ich konnte das nicht tun:

sample(int a):y(a){} 

Warum ist das so?

+0

Leider gibt es kein Semikolon am Ende der Anweisung . – Deepika

+4

Vielleicht ein Buch lesen, um die Grundlagen zu lernen? https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – Galik

+0

@Deepika Wenn Sie einen Fehler in Ihrer Frage gemacht haben, können Sie es bearbeiten, um es zu beheben. –

Antwort

3

Eine statische Membervariable gehört nicht zu einer einzelnen Instanz Ihrer Klasse. Wenn also ein Konstruktor (eine Funktion, die eine Instanz initialisiert) ausgeführt wird, wird das statische Element bereits initialisiert. Sie können es nicht erneut initialisieren.

Sie können jedoch, um es im Konstruktor des Körpers zuordnen:

sample(int a) {y = a;} 

obwohl das selten von Nutzen sein wird.

Erneut erinnern: Jedes Mal, wenn ein Konstruktor ausgeführt wird, erstellt er eine Instanz, während statische Elemente in allen Instanzen vorhanden sind.

0

Ein statisches Member ist pro Klasse, nicht pro Instanz, daher wird ein statisches Member nur einmal in der Lebensdauer des Programms erstellt. Ein Konstruktor wird jedes Mal aufgerufen, wenn Sie eine Instanz der Klasse erstellen.

Was Sie tun möchten, ist das statische Element, das innerhalb einer .cc Datei zu initialisieren, die in gemocht wird

So etwas wie:.

// Foo.h 

class Bar { 
    public : 
     Bar(int) { 
     } 

}; 

class Foo { 
    public: 
     static Bar MrStatic; 
}; 

// Foo.cc 

Bar Foo::MrStatic(10); 
Verwandte Themen