我尝试通过3种不同的方式用构造函数初始化2D向量,但总是得到
"error: no matching function to call"
你能告诉我我哪里错了吗?
class Node
{
public:
int to;
int length;
Node(int to, int length) : to(to), length(length){}
};
class Graph
{
public:
vector<vector<Node>> nodes_list;
int n;
Graph();
};
Graph::Graph(){
nodes_list = vector<vector<Node> >(n, vector<Node>(n,0x3fffffff));
}
答案 0 :(得分:3)
vector<Node>(n,0x3fffffff);
(大致)等同于:
vector<Node> v;
for ( size_t i = 0; i < n; i++ )
{
v.push_back(Node(0x3fffffff));
}
由于您的Node
类没有带单个整数的构造函数,因此无法编译。正确的代码是:
vector<Node>(n,Node(0x3fffffff,0));
按照我假设您在using namespace std;
的标头中包含Graph
的方式,请不要这样做,这会在某些时候导致问题。
答案 1 :(得分:2)
您的代码有两个问题:
在以下行中,您应该提供了用于
构造Node
和to
的{{1}} 。
legth
vector<vector<Node>>(n, vector<Node>(n,0x3fffffff));
// ^^^^^^^^^^^--> here
中,成员 Graph
尚未初始化,位于
指向默认构造函数。那会导致你有
n
中的垃圾值,因此n
的大小将
不确定。固定代码如下:
nodes_list
还有一些建议:
struct Node
{
int _to;
int _length;
Node(int to, int length) : _to{ to }, _length{ length } {}
};
class Graph
{
using VecNode = std::vector<Node>; // type alias for convenience
private:
int _n;
std::vector<VecNode> _nodes_list;
public:
Graph()
: _n{ 2 } // initialize _n
, _nodes_list{ _n, VecNode(_n, { 1, 3 }) }
// ^^^^^^-> initialize with the default 'Node(1, 3)'
{}
};
中具有相同成员的成员。在某些时候,这可能会导致
混乱。