我有一个如下定义的结构
struct valindex {
int x;
int y;
valindex(int val, int index) : x(val), y(index) {}
};
我在尝试初始化此结构的向量
时遇到错误vector<valindex> vals() // this works fine
vector<valindex> vals(20) // throws the error mentioned below when the size is specified
required from 'static _ForwardIterator std::__uninitialized_default_n_1<_TrivialValueType>::__uninit_default_n(_ForwardIterator, _Size) [with _ForwardIterator = valindex*; _Size = long unsigned int; bool _TrivialValueType = false]'
有人可以解释此错误的原因并提供解决方案吗?
谢谢!
答案 0 :(得分:3)
vector<valindex> vals();
有效,因为它声明了一个名为vals
的函数,该函数不带参数并返回vector<valindex>
。请参阅https://en.wikipedia.org/wiki/Most_vexing_parse。
vector<valindex> vals(20);
不起作用,因为它尝试构建vector
valindex
,而创建此类对象的要求之一是valindex
为default-constructible。由于valindex
不是默认构造的,因此无法编译该行。
答案 1 :(得分:0)
std :: vector有另一个有用的构造函数:
std :: vector vals(999,{11,55});
矢量vals将存储999份valindex(11,55)。欢迎来到c ++ 11!