2012-08-22 17 views
6

Ich versuche, eine statische konstante Variable zu meiner Klasse hinzuzufügen, die eine Instanz einer Struktur ist. Da es statisch ist, muss ich initialisieren es in der Klassendeklaration. Der Versuch, diesen CodeC++ Initialisiere statische const Strukturvariable

class Game { 
    public: 
     static const struct timespec UPDATE_TIMEOUT = { 10 , 10 }; 

    ... 
}; 

diesen Fehler:

error: a brace-enclosed initializer is not allowed here before '{' token

error: invalid in-class initialization of static data member of non-integral type 'const timespec'

Wie kann ich es initialisieren? Vielen Dank!

+3

Beachten Sie, dass ausgearbeitete Typbezeichner ('struct timespec') in C++ ziemlich nicht benötigt werden. Schreib 'malpec'. – GManNickG

Antwort

15

initialisieren es in einer separaten Definition außerhalb der Klasse, in einer Quelldatei:

// Header file 
class Game { 
    public: 
     // Declaration: 
     static const struct timespec UPDATE_TIMEOUT; 
    ... 
}; 

// Source file 
const struct timespec Game::UPDATE_TIMEOUT = { 10 , 10 }; // Definition 

Wenn Sie die Definition in einer Header-Datei enthalten, werden Sie wahrscheinlich Linker Fehler zu multiplizieren definierte Symbole, wenn dieser Header erhalten ist in mehr als einer Quelldatei enthalten.

+1

Ich bin ziemlich noob in C++, ich habe gehört, ich sollte _declare_ Klassen in 'classname.h' Datei und _define_ sie in' classname.c' Datei. Und so kann ich '.h' Dateien so oft in meine Programme einbinden, wie ich brauche, aber wann und wie verwende ich' .c' Datei? Ich verwende einen g ++ - Compiler ... – Kolyunya

+0

'.c' ist für C-Quelldateien, nicht für C++ verwenden. Verwenden Sie entweder '.cc' oder' .cpp' für C++ - Quelldateien ('.cc' wird im Allgemeinen unter Linux bevorzugt,' .cpp' wird im Allgemeinen unter Windows bevorzugt, aber beides wird ausreichen). Im Allgemeinen sagt eine * Deklaration * "Hier ist der Name von etwas, aber das ist alles, was ich darüber weiß" (z. B. der Name einer Klasse oder Funktion). Eine * Definition * sagt "Hier ist der Name von etwas und was es ist", z.B. Klassenmitglieder, Funktionskörper, variabler Wert, etc. –

+0

Ja, ich bekomme das, danke! Ich deklariere meine Klasse in '.h' Datei, dann definiere ich sie in' .cpp' Datei. Dann schließe ich '.h' in mein Programm ein. Nun die Frage: Was soll ich mit meiner '.cpp' Datei machen? Wie benutze ich es? Soll ich es hier irgendwo schreiben "g ++ main.cpp -o main"? Ich verwende g ++ unter Linux. – Kolyunya

0

Deklarieren Sie die Variable als statische Variable innerhalb einer Funktion, und geben Sie dieser Funktion den Verweis auf die Variable zurück.

Verwandte Themen