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

Posted

技术标签:

【中文标题】初始化具有大小的对象向量时出错【英文标题】:Error when initializing vector of objects with size 【发布时间】:2014-04-28 00:29:25 【问题描述】:

我正在尝试初始化一个包含特定大小的 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);

【问题讨论】:

C++ vectors of classes with constructors 的可能重复项 【参考方案1】:

您的调用要求可以创建Node 对象。错误消息的第一行说,它没有默认构造函数。

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

【讨论】:

【参考方案2】:

由于Node 显然没有默认构造函数,你不能默认构造其中的 500 个。

您必须从一开始就为每个元素提供构造函数参数,方法是从占位符实例化每个元素:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于初始化具有大小的对象向量时出错的主要内容,如果未能解决你的问题,请参考以下文章

调整对象矢量大小时出错

使用 unordered_map 值初始化指向向量的指针时出错

如何使用大小和值构造函数使用成员初始化器列表初始化用户定义对象的向量

编译类型向量类的私有成员时出错 - C++ [重复]

如何通过使用自定义构造函数而不调用析构函数来创建具有初始大小的向量? [复制]

处于释放模式时,C ++向量未初始化为空