错误2552:无法使用初始化程序列表初始化非聚合

时间:2019-05-05 12:53:28

标签: c++ visual-studio-2010 vector initialization

我正在尝试使用以下代码在标头中初始化向量,但出现错误

  

C2552:“ LABELS”:无法使用以下内容初始化非聚合   初始化程序列表。

我搜索的原因是VS2010不支持C ++ 11初始化程序列表。

如何在VS2010中初始化矢量?

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

1 个答案:

答案 0 :(得分:0)

这应该有效。至少是纯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;

是的,如果不升级编译器,您可能会遇到更多问题。