我有一个定义如下的结构
struct valindex {
int x;
int y;
valindex(int val, int index) : x(val), y(index) {}
};
尝试初始化此结构的 vector 时出现错误
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]'
有人可以解释这个错误的原因并提供解决方案吗?
谢谢!
最佳答案
vector<valindex> vals();
之所以有效,是因为它声明了一个名为 vals
的函数不带参数并返回 vector<valindex>
.参见 https://en.wikipedia.org/wiki/Most_vexing_parse .
vector<valindex> vals(20);
不起作用,因为它试图构造一个 vector
的 valindex
创建这样一个对象的要求之一是 valindex
是 default-constructible .自 valindex
不是默认可构造的,无法编译该行。
关于c++ - 初始化具有大小的结构 vector 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44768051/