使用数据初始化向量无效 - push_back() 确实有效

Initializing vector with data not working - push_back() does work

我正在尝试创建一个 typedef 向量。每当我尝试使用这些 typedef 之一初始化向量时,它都会出现 no instance of constructor 错误。

typedef定义如下:

typedef palam::geometry::Pt2<uint16_t> CPoints;

我正在尝试像这样初始化一个向量:

CPoints point1(10, 15);
CPoints point2(15, 20);
std::vector<CPoints> points(point1, point2);

但这不起作用。我可以通过使用 NULL 值初始化向量然后使用 push_back() 函数来解决这个问题,就像这样

CPoints point1(10, 15);
CPoints point2(15, 20);
std::vector<CPoints> points(NULL);
points.push_back(point1);
points.push_back(point2);

这项工作似乎有点混乱,我相信一定有更好的方法来解决这个问题。有谁知道为什么我无法使用 typedef 直接初始化向量?

使用这条记录

std::vector<CPoints> points = { point1, point2 };

或者这个

std::vector<CPoints> points { point1, point2 };

或这个

std::vector<CPoints> points( { point1, point2 } );

如果您想同时向向量提供多个对象,则使用初始化列表。

否则编译器会尝试应用这些构造函数之一

vector(size_type n, const T& value, const Allocator& = Allocator());
template <class InputIterator>
vector(InputIterator first, InputIterator last,
const Allocator& = Allocator());

对于声明中指定的参数无效

std::vector<CPoints> points(point1, point2);

这段代码:

std::vector<CPoints> points(point1, point2);

调用 vector constructor 接受 2 个参数。如果你想用多个元素初始化一个vector,使用{},像这样:

std::vector<CPoints> points {point1, point2};

这调用了 9 号重载,它采用初始化列表。