将向量中的对象插入指针列表

时间:2015-03-25 17:38:00

标签: c++ pointers containers

我正在尝试将对象从向量推回到指针列表。不幸的是,我的方法无法正常工作。

list<CStudent*> averageparam(const int a, const int b)
{
    list<CStudent*> l;
    vector<CStudent>::iterator itt;
    for (itt=students.begin();itt!=students.end();itt++)
        if((*itt).average() >= a && (*itt).average() <= b)
            l.push_back(*itt);
    return l;
}

这是我在线l.push_back(*itt)

上收到的错误
no matching function for call to 'std::list<CStudent*>::push_back(CStudent&)'". 

如果我没弄错,我需要在main函数中调用print方法(*it)->print(),但我不知道如何将向量中的对象插入到指针列表中。

这是main函数中的代码,它调用此方法。

list<CStudent*> l;
a=50, b=60;
for (it=uni.begin();it!=uni.end();it++)
{
    l = (*it).averageparam(a,b);
    if (l.empty())
        cout<<"There are no students in spec."<<(*it).getspec()<<" course "<<(*it).getkurs()<<" group "<<(*it).getgrupa()<<" with average amount of points between "<<a<<" - "<<b<<endl<<endl;
    else
    {
        cout<<"Students in spec."<<(*it).getspec()<<" course "<<(*it).getkurs()<<" group "<<(*it).getgrupa()<<" with average amount of points between "<<a<<" - "<<b<<endl;
        list<CStudent>::iterator it=l.begin();
        for (it=l.begin();it!=l.end();it++)
            (*it).print();
        cout<<endl;
    }
}

1 个答案:

答案 0 :(得分:3)

这一行:

l.push_back(*itt);

正在传递CStudent&,而l仅接收CStudent*。将该行更改为

l.push_back(&*itt);

将传递存储的CStudent项的地址(指针)。