在stl列表中调用构造函数失败



我创建了以下程序

/* Directed Graph-- WEIGHTED    */
#include<iostream>
#include<vector>
#include<list>
using namespace std;
class node{
    int vertex;
    int weight;
public:
    node(){
        vertex=0;
        weight=0;
    }
    node(int a, int b){
            vertex=a;
            weight=b;
       }
};
int main()
{
    int no_of_vertex, no_of_relation;
    cout<<endl<<"Enter no of Vertices:";
    cin>>no_of_vertex;
    cout<<endl<<"Enter no of relations:";
    cin>>no_of_relation;
    vector < list<node> > adj_list[no_of_vertex+1];
    int sv=0, ew=0, dv=0;
    for(int i=0; i<no_of_relation; i++)
    {
        cout<<endl<<"Enter Source_Vertex, Edge_Weight, Destination_Vertex:";
        cin>>sv;
        cin>>ew;
        cin>>dv;
        adj_list[sv].push_back(node (dv, ew));
    }
return 0;
}

我收到一个错误

no matching function for call to 'std::vector<std::list<node> >::push_back(node)'

adj_list[sv].push_back(node (dv, ew));

我无法理解错误的原因。只要一个提示就可以了。我对c++有点陌生,非常感谢您的帮助。

此语句

adj_list[sv].push_back(node (dv, ew));

如果adj_list被定义为,则可能是有效的

vector < node > adj_list[no_of_vertex+1];

但你把它定义为

vector < list<node> > adj_list[no_of_vertex+1];

编译器无法将node类型的对象node (dv, ew)隐式转换为std::list<node>类型的对象。

你可以写例如

adj_list[sv].push_back({ 1, node (dv, ew) } );

但在任何情况下,您的代码似乎都毫无意义。

请使用:

adj_list[sv][sv].push_back(node (dv, ew)); 

最新更新