2012-06-28 12 views

risposta

7

intestazione: file di

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

Implementazione:

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

che inserirà una chiamata al costruttore per la mappa nel codice di inizializzazione del programma (e un distruttore nella pulizia). Attenzione però: l'ordine dei costruttori statici come questo tra unità di traduzione diverse non è definito.

+0

Dice che la mia mappa è privata e quindi l'inizializzazione predefinita nella parte superiore del mio file CC non è valida. –

+0

Pubblica il tuo codice, stai facendo un errore da qualche parte. –

+0

Ho dovuto spostare il mio typedef in pubblico, ma ho mantenuto il mio membro privato. Questo l'ha risolto. –

5

ne dite di questo (se ho capito bene):

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

Oppure semplicemente 'std :: map YourClass :: YourMember;' –

+0

@MikeSeymour: Esattamente. Sto solo chiarendo che potresti dare argomenti al costruttore se lo volessi. – Linuxios

3

Se si definisce nella definizione della classe, poi si deve dichiarare che l'attuazione:

--- 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 

è possibile utilizzare una di inizializzazione, troppo :

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

Nitpick: sarebbe/dichiarato/nella classe e/definito/nell'implementazione. – Grault

Problemi correlati