尝试使用从ptr_map :: find返回的迭代器时出错

时间:2016-07-14 07:12:30

标签: c++ boost

我在下面的代码中遇到编译错误。错误是:

/ ... /main.cpp:21:22: error: no member named 'name' in 'boost::ptr_container_detail::ref_pair<std::__1::basic_string<char>, repo *const>'
    std::cout << it->name;
                 ~~  ^

我在这里做错了什么?我已经尝试了it.name和it-&gt; name并且都没有用。

问候,大卫。

#include <boost/ptr_container/ptr_map.hpp>

class repo {
public:
    repo(const std::string & repo_name) : name(repo_name) {}

    std::string name;
};

typedef boost::ptr_map<std::string, repo> repo_map;
repo_map repos;

int main() {
    std::string repo_name("x");

    repo_map::iterator it = repos.find(repo_name);
    if (it == repos.end()) {
        it = repos.insert(repo_name, new repo(repo_name)).first;
    }

    std::cout << it->name;

    return 0;
}

2 个答案:

答案 0 :(得分:1)

我认为这将完成工作

它 - &GT; second.name

答案 1 :(得分:1)

由于它是 ptr _map,因此会返回pair<key, ptr_value>。所以你需要:

it->second->name