我有一个模板类,它是一个简单的向量,但是这段代码拒绝编译:
template<int t>
struct Vector {
int pos[t];
Vector(int other[t]) {
for (int i = 0;i < t;++i) {
pos[i] = other[i];
}
}
};
Vector<3> cake = {3,4,5};
这是错误:
Line 11: error: scalar object 'cake' requires one element in initializer
compilation terminated due to -Wfatal-errors.
为什么这不起作用?让它与此类似地工作的最简单方法是什么?
编辑:
这两项都不起作用:
Vector<3> cake({3,4,5});
是不应该调用带有签名Vector<3>(int[3])
的构造函数?
答案 0 :(得分:2)
在C ++ 03中,{}
的初始化形式仅允许聚合(也包括POD)。
代码中的类模板不是POD,也不是聚合。在这里阅读我的答案,了解POD和Aggregate的定义。
一旦你知道了这些定义,你就会知道如何制作你的课程POD(如果你愿意的话)。
但是,在C ++ 11中,您可以使用{}
初始化程序,但是您使用std::initializer_list<T>
作为构造函数的参数类型。然后你可以使用{}
甚至是非POD和Aggregate的类型!