2012-06-28 20 views

Respuesta

7

Cabecera: archivo

class XXX { 
private: 
    static std::map<X,Y> the_map; // declares static member 
// ... 

Implementación:

std::map<X,Y> XXX::the_map; // defines static member 

que insertará una llamada al constructor para su mapa en el código de inicialización del programa (y un destructor en la limpieza). Sin embargo, ten cuidado: el orden de constructores estáticos como este entre diferentes unidades de traducción no está definido.

+0

Dice que mi mapa es privado y, por lo tanto, la inicialización predeterminada en la parte superior de mi archivo CC no es válida. –

+0

Publica tu código, estás cometiendo un error en alguna parte. –

+0

Tuve que mover mi typedef al público, pero mantuve mi miembro privado. Eso lo solucionó –

5

¿Qué hay de esto (si he entendido bien):

std::map<T,T2> YourClass::YourMember = std::map<T,T2>(); 
+0

O simplemente 'std :: map YourClass :: YourMember;' –

+0

@MikeSeymour: Exactamente. Solo aclarando que podrías dar argumentos de constructor si quisieras. – Linuxios

3

si se define en la definición de clase, entonces usted tiene que declarar en la implementación:

--- test.h ---

// includes and stuff... 
class SomeClass 
{ 
    private: 
     static std::map<int,std::string> myMap; 
}; 

--- test.cpp ---

std::map<int,std::string> SomeClass::myMap; // <-- initialize with the map's default c'tor 

Se puede utilizar una inicialización, también :

std::map<int,std::string> SomeClass::myMap = std::map<int,std::string>(myComparator); 
+0

Nitpick: Eso sería/declaró/en la clase y/define/en la implementación. – Grault

Cuestiones relacionadas