初始化具有大小的对象矢量时出错

时间:2014-04-28 00:29:25

标签: c++ vector stl

我试图初始化一个包含特定大小的Node对象的向量。代码:

std::vector<Node> vertices(500);

产生以下错误:

In constructor ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const value_type&, const allocator_type&) [with _Tp = Node; _Alloc = std::allocator<Node>; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp,         _Alloc>::value_type = Node; std::vector<_Tp, _Alloc>::allocator_type =   std::allocator<Node>]’:
test.cpp:47:36: error: no matching function for call to ‘Node::Node()’
    std::vector<Node> vertices(500);
                                ^
test.cpp:47:36: note: candidates are:
test.cpp:13:3: note: Node::Node(unsigned int)
   Node(unsigned int label) : m_label(label), degree(0) {}
   ^
test.cpp:13:3: note:   candidate expects 1 argument, 0 provided
test.cpp:7:7: note: Node::Node(const Node&)
 class Node {
       ^
test.cpp:7:7: note:   candidate expects 1 argument, 0 provided
test.cpp:47:36: note:   when instantiating default argument for call to std::vector<_Tp,     _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const value_type&, const  allocator_type&) [with _Tp = Node; _Alloc = std::allocator<Node>; std::vector<_Tp,  _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::value_type = Node;    std::vector<_Tp, _Alloc>::allocator_type = std::allocator<Node>]
    std::vector<Node> vertices(500);

3 个答案:

答案 0 :(得分:2)

您的通话要求可以创建Node个对象。错误消息的第一行表示它没有默认构造函数。

因此,编译器不知道如何创建所请求的500个对象。

答案 1 :(得分:1)

由于Node显然没有默认构造函数,因此不能默认构造500个。

通过实例化占位符中的每个元素,您必须为get-go中的每个元素提供构造函数参数:

std::vector<Node> vertices(500, Node(args));

答案 2 :(得分:1)

根据vector constructor reference,编译器告诉你它找不到这个类的默认构造函数。

要解决此问题,您需要为类Node实现默认构造函数,或者提供要复制500次的Node实例。