2010-01-22 17 views

Respuesta

18
//Header File 
class test 
{ 
    const static char array[]; 
}; 

// .cpp 
const char test::array[] = { '1', '2', '3' }; 
+0

Gracias, era no estoy seguro si podría hacer esto fuera de un miembro. – user174084

+8

No hay estática en la definición, por favor. –

+1

¿Por qué las personas envían código que obviamente no compilará? –

42

El mejor lugar sería en un archivo de origen

// Header file 
class test 
{ 
    const static char array[]; 
}; 

// Source file 
const char test::array[] = {'1','2','3'}; 

Puede inicializar los tipos enteros en la declaración de clase que ha intentado hacer; todos los demás tipos deben inicializarse fuera de la declaración de clase, y solo una vez.

+0

¿No debería decir "... en la clase * declaración * ..."? Pensé que '.h' eran declaraciones y' .c' eran definiciones, por lo que tomar una referencia a un tipo entero que se declara solo en el encabezado da como resultado un error de compilación: 'referencia indefinida para probar :: SOME_INTEGER'? (Me doy cuenta de que esto suena muy quisquilloso y pedante, y no estoy tratando de ser difícil, solo quiero asegurarme de que estoy usando la terminología correcta, así que definitivamente corrígeme si estoy equivocado). – dwanderson

22

siempre se puede hacer lo siguiente:

class test { 
    static const char array(int index) { 
    static const char a[] = {'1','2','3'}; 
    return a[index]; 
    } 
}; 

Un par de cosas buenas acerca de este paradigma:

  • No hay necesidad de un archivo CPP
  • Usted puede hacer la comprobación rango si quieres
  • Usted evita tener que preocuparse por el static initialization fiasco
+1

No pude obtener el compilador para que luego '& a [1]' sea consistente sobre varios objetos. – Alex

+0

Para literales de cadena, ¡esto es perfecto! – sage

+2

Su enlace "fiasco de inicialización estática" está muerto. – sergiol

5

Ahora, en C++ 17, puede utilizar variables en línea

How do inline variables work?

A simple static data member(N4424):

struct WithStaticDataMember { 
    // This is a definition, no out­of­line definition is required. 
    static inline constexpr const char *kFoo = "foo bar"; 
}; 

En su ejemplo:

//Header File 
class test 
{ 
    inline constexpr static char array[] = { '1', '2', '3' }; 
}; 

sólo debe trabajar

Cuestiones relacionadas