У меня есть класс Сорт, как:(VS2015) Попытка заполнить статическую карту с данными из списка инициализаторов
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;
}
Я в настоящее время на VS2015, но хочу поддержать лязг и GCC (последний). Моя проблема в том, что я не могу понять, как на самом деле инициализировать эту карту данными.
Я попытался положить его рядный, как:
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' } }
}
Но жаловалась, что только константные интегральные типы могут быть в классе. Хорошо! Так что я просто оставил его в качестве декларации в определении класса (как показано в первом фрагменте кода), и поместить его в соответствующем CPP:
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' } }
}
Теперь это жалуется, что:
error C2440: 'initializing': cannot convert from 'initializer list' to 'std::map,std::allocator>>'
вещь, я мог бы присяжный У меня было это работает, поэтому я думаю, что я должен иметь синтаксис неправильно. Если нет, ясно, что мне не хватает загрузки статической карты в пространство имен классов.
Это неправда больше с C++ 14 Я думаю (похоже, VS немного опоздал). – Holt
@ Хольт, это приятно знать. Спасибо за головы. –
Эта ссылка может дополнять ваши. Я думаю: http://en.cppreference.com/w/cpp/language/aggregate_initialization – Holt