2012-08-22 8 views
6

Sto tentando di aggiungere una variabile costante statica alla mia classe, che è un'istanza di una struttura. Poiché è statico, I deve inizializzarlo nella dichiarazione della classe. Cercando questo codiceC++ Inizializzazione della variabile di struttura const statica

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

    ... 
}; 

questo errore:

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'

Come posso inizializzarlo? Grazie!

+3

Nota che gli specificatori di tipo elaborato ('struct timespec') non sono praticamente necessari in C++. Basta scrivere 'timespec'. – GManNickG

risposta

15

inizializzare in una definizione autonoma al di fuori della classe, all'interno di un file sorgente:

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

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

Se si include la definizione in un file di intestazione, è probabile ottenere errori del linker circa simboli moltiplicano definiti se quel colpo di testa è incluso in più di un file sorgente.

+1

Sono piuttosto noob in C++, ho sentito, dovrei _declare_ classes nel file 'classname.h' e _define_ loro nel file' classname.c'. Quindi potrò includere il file '.h' nei miei programmi quante volte ho bisogno, ma quando e come usare il file' .c'? Sto usando un compilatore g ++ ... – Kolyunya

+0

'.c' è per i file sorgente C, non usarlo per C++. Usa '.cc' o' .cpp' per i file sorgente C++ ('.cc' è generalmente preferito su Linux,' .cpp' è generalmente preferito su Windows, ma lo farà anche). In generale, una * dichiarazione * dice "ecco il nome di qualcosa, ma questo è tutto ciò che so su di esso" (ad esempio il nome di una classe o funzione). Una definizione * dice "ecco il nome di qualcosa e di cosa si tratta", ad es. membri della classe, corpo della funzione, valore variabile, ecc. –

+0

sì, ho capito, grazie! Dichiaro la mia classe nel file '.h', quindi la definisco nel file' .cpp'. Quindi includo '.h' nel mio programma. Ora la domanda: cosa devo fare con il mio file '.cpp'? Come lo uso? Dovrei scriverlo da qualche parte qui 'g ++ main.cpp -o main'? Sto usando g ++ su Linux. – Kolyunya

0

Dichiarare la variabile come variabile statica all'interno di una funzione e rendere tale funzione restituire il riferimento alla variabile.