2012-08-22 14 views
6

Estoy tratando de agregar una variable constante estática a mi clase, que es una instancia de una estructura. Como está estático, I debe inicializarlo en la declaración de clase. Tratando este códigoC++ Inicializando la variable de estructura estática inicial

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

    ... 
}; 

conseguir este error:

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'

¿Cómo inicializarlo? ¡Gracias!

+3

Tenga en cuenta que los especificadores de tipo elaborados ('struct timespec') prácticamente no se necesitan en C++. Simplemente escribe 'timespec'. – GManNickG

Respuesta

15

inicializarlo en una definición por separado fuera de la clase, dentro de un archivo de origen:

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

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

Si se incluye la definición de un archivo de cabecera, probablemente obtendrá errores de enlace sobre los símbolos definidos multiplican si esa cabecera está incluido en más de un archivo fuente.

+1

Soy bastante novato en C++, he escuchado, debería _declarar_ clases en el archivo 'classname.h' y _define_ them en el archivo' classname.c'. Y entonces podré incluir el archivo '.h' en mis programas tantas veces como lo necesite, pero ¿cuándo y cómo uso el archivo' .c'? Estoy usando un compilador g ++ ... – Kolyunya

+0

'.c' es para archivos fuente C, no lo use para C++. Utilice '.cc' o' .cpp' para archivos fuente de C++ (generalmente se prefiere '.cc' en Linux,' .cpp' es generalmente preferido en Windows, pero cualquiera lo hará). En general, una * declaración * dice "aquí está el nombre de algo, pero eso es todo lo que sé sobre él" (por ejemplo, el nombre de una clase o función). Una * definición * dice "aquí está el nombre de algo y lo que es", p. miembros de la clase, cuerpo de la función, valor de la variable, etc. –

+0

sí, entiendo esto, ¡gracias! Declaro mi clase en el archivo '.h', luego la defino en el archivo' .cpp'. Luego incluyo '.h' a mi programa. Ahora la pregunta: ¿qué debería hacer con mi archivo '.cpp'? ¿Como lo uso? ¿Debería escribirlo en algún lugar aquí 'g ++ main.cpp -o main'? Estoy usando g ++ en Linux. – Kolyunya

0

Declare la variable como una variable estática dentro de una función y haga que esa función devuelva la referencia a la variable.

Cuestiones relacionadas