我试图初始化一个包含特定大小的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);
答案 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实例。