搜索地图并打印矢量

时间:2018-12-01 21:53:16

标签: c++ vector

我有一个STL映射,该映射将密钥映射到可交付成果的向量。 我想在地图上搜索某个键并打印出所有可交付成果。我试图遍历矢量并在每个项目上调用print。

typedef std::vector<Deliverables>      MyDeliverables;
typedef std::map<int, MyDeliverables> MyMap;

MyMap map1;

template < class T >

void printVector( const vector <T> &v)
{
    for (auto p = v.begin(); p != v.end(); ++p)
        *p->print();
}


int main()
{   
Deliverables del("Name", 12, 12, 2018);

map1.insert(MyMap::value_type(1, MyDeliverables()));

auto search = map1.find(1);
if (search != map1.end()) {
    std::cout << "Found Student ID: " << search->first << '\n';
    printVector(search->second);
}
else {
    std::cout << "Not found\n";
}
}
  

错误C2662'无效的可交付成果:: print(void)':无法将'this'指针从'const可交付成果'转换为'可交付成果&'
    行:* p-> print();

如何正确打印可交付成果?

1 个答案:

答案 0 :(得分:2)

问题出在您未显示的代码上:

Deliverables::print()

它不是const,所以您不能使用它。将打印功能声明为const,然后可以使用const Deliverables&

Deliverables::print() const

然后更改循环以避免对要取消引用的内容和次数进行混淆:

for(const auto& p: v)
    p.print();