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

时间:2014-10-23 08:15:56

标签: c++ class 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 ++有些新意,非常感谢。

2 个答案:

答案 0 :(得分:1)

本声明

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 (dv, ew)类型的对象node隐式转换为std::list<node>类型的对象。

你可以写例如

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

但似乎你的代码无论如何都没有意义。

答案 1 :(得分:0)

相反,请使用:

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