ich eine Klasse sorta habe wie zu füllen Versuch:(VS2015) eine statische Karte mit Daten aus Initialisiererliste
class Object {
public:
struct Flag {
const uint32_t bit = 0;
const wchar_t* name = L"";
const wchar_t sign = L"";
}
static std::map<const char*, Flag> Flags;
}
Ich bin zur Zeit auf VS2015, will aber Klirren und gcc (die neuesten) unterstützen. Mein Problem ist, ich kann nicht herausfinden, wie man diese Karte tatsächlich mit Daten initialisiert.
Ich versuchte es inline setzen, wie:
static std::map<const char*, Flag> Flags = {
{ "FOO1", { 0, L"FOO1", L'A' } },
{ "FOO2", { 1, L"FOO3", L'B' } },
{ "FOO3", { 2, L"FOO3", L'C' } }
}
Aber das darüber beschwert, dass nur const ganzzahligen Typen in-Klasse sein kann. Okay! Also ließ ich es ebenso wie die Deklaration in der Klassendefinition (wie im ersten Codeausschnitt gezeigt) und setzen diese in der zugehörigen cav:
static std::map<const char*, Object::Flag> Object::Flags = {
{ "FOO1", { 0, L"FOO1", L'A' } },
{ "FOO2", { 1, L"FOO3", L'B' } },
{ "FOO3", { 2, L"FOO3", L'C' } }
}
Nun beklagt dies:
error C2440: 'initializing': cannot convert from 'initializer list' to 'std::map,std::allocator>>'
Die Ding ist, ich könnte haben geschworen Ich hatte dies funktioniert, so denke ich, ich muss die Syntax falsch haben. Wenn nicht, vermisse ich eindeutig, wie man eine statische Map in einen Klassen-Namespace lädt.
Das stimmt nicht mehr mit C++ 14 Ich denke (sieht aus wie VS ist ein bisschen spät). – Holt
@Holt, das ist gut zu wissen. Danke für die Köpfe hoch. –
Dieser Link kann ergänzen Sie denke ich: http://en.cppreference.com/w/cpp/language/aggregate_initialization – Holt