初始化具有大小的结构向量时出错

时间:2017-06-26 20:21:10

标签: c++ vector

我有一个如下定义的结构

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]'

有人可以解释此错误的原因并提供解决方案吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

vector<valindex> vals();

有效,因为它声明了一个名为vals的函数,该函数不带参数并返回vector<valindex>。请参阅https://en.wikipedia.org/wiki/Most_vexing_parse

vector<valindex> vals(20);

不起作用,因为它尝试构建vector valindex,而创建此类对象的要求之一是valindexdefault-constructible。由于valindex不是默认构造的,因此无法编译该行。

答案 1 :(得分:0)

std :: vector有另一个有用的构造函数:

std :: vector vals(999,{11,55});

矢量vals将存储999份valindex(11,55)。欢迎来到c ++ 11!