ошибка 2552: неагрегаты не могут быть инициализированы списком инициализаторов - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь инициализировать вектор в заголовке с помощью следующего кода, но получаю ошибку

C2552: 'LABELS': неагрегаты не могут быть инициализированы с помощью списка инициализатора.

Я искал, потому что VS2010 не поддерживает списки инициализатора C ++ 11.

Как я могу инициализировать вектор в VS2010?

const int CLEAN = 0;
const int TARGET = 1; 
const vector<int> LABELS = { CLEAN, TARGET };

1 Ответ

0 голосов
/ 05 мая 2019

Это должно работать. По крайней мере, это чистый C ++ 98

const int CLEAN = 0;
const int TARGET = 1;
const int LABELS_N = 2;
int LABELS_A[LABELS_N] = { CLEAN, TARGET};
const std::vector<int> LABELS(LABELS_A, LABELS_A+LABELS_N);

Я бы также порекомендовал вам заключить дополнительные элементы в пространство имен:

namespace detail {
    const int LABELS_N = 2;
    int LABELS_A[LABELS_N] = { CLEAN, TARGET};
}
const std::vector<int> LABELS(detail::LABELS_A, detail::LABELS_A+detail::LABELS_N);

Другой вариант - использование класса инициализатора, особенно если у вас много глобальных констант, таких как:

namespace detail {
    struct Initializer
    {
        Initializer()
        {
            LABELS.push_back(CLEAN);
            LABELS.push_back(TARGET);
        }
        std::vector<int> LABELS;
    };
    const Initializer initializer;
}
const std::vector<int>& LABELS = detail::initializer.LABELS;

И да, у вас, скорее всего, будут другие проблемы, если вы не обновите свой компилятор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...