Mam static map
, która jest elementem danych private
. Jak zainicjować go w pliku implementacji, aby początkowe kontenery były puste? To nie jest const
. Ważne jest, aby na początku nic nie było w tym pojemniku.Zainicjuj statyczną prywatną mapę jako pustą
Odpowiedz
nagłówka: plik
class XXX {
private:
static std::map<X,Y> the_map; // declares static member
// ...
realizacji:
std::map<X,Y> XXX::the_map; // defines static member
To będzie wstawić wywołanie konstruktora dla twojej mapie do kodu inicjalizacji programu (i destruktora do czyszczenia). Bądź jednak ostrożny - kolejność konstruktorów statycznych takich jak ta między różnymi jednostkami tłumaczeniowymi jest niezdefiniowana.
Jak o tym (jeśli dobrze rozumiem poprawnie):
std::map<T,T2> YourClass::YourMember = std::map<T,T2>();
Lub po prostu 'std :: map
@MikeSeymour: Dokładnie. Po prostu wyjaśnienie, że możesz podać argumenty konstruktora, jeśli chcesz. – Linuxios
Jeśli zdefiniować go w definicji klasy, to musisz zadeklarować ją w realizacji:
--- 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
Można użyć inicjalizacji, zbyt :
std::map<int,std::string> SomeClass::myMap = std::map<int,std::string>(myComparator);
Nitpick: Byłby/zadeklarowany/w klasie i/zdefiniowany/w implementacji. – Grault
Mówi, że moja mapa jest prywatna, więc domyślna inicjalizacja na górze mojego pliku CC jest nieprawidłowa. –
Po przesłaniu kodu, gdzieś popełnisz błąd. –
Musiałem przenieść mój typedef do publicznego, ale zachowałem mojego członka prywatnego. To naprawiło to. –