我正在尝试使用以下代码在标头中初始化向量,但出现错误
C2552:“ LABELS”:无法使用以下内容初始化非聚合 初始化程序列表。
我搜索的原因是VS2010不支持C ++ 11初始化程序列表。
如何在VS2010中初始化矢量?
const int CLEAN = 0;
const int TARGET = 1;
const vector<int> LABELS = { CLEAN, TARGET };
答案 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;
是的,如果不升级编译器,您可能会遇到更多问题。