为什么使用迭代器的真值?

时间:2013-02-19 11:02:23

标签: c++

我在我的一个模板中的方法中实例化一个迭代器。当我使用auto动态获取类型信息时,它可以工作:

auto itr = my_list.cbegin();

但是,当我使用实际类型时出现编译时错误:

typedef InternalEdge network_internal_edge_type;
typedef std::shared_ptr< network_internal_edge_type > network_shared_edge_ptr;
typedef std::list< network_shared_edge_ptr > network_internal_edge_store_type;

network_internal_edge_store_type::const_iterator itr = internal_edges_.cbegin();

InternalEdge是我在代码中上面定义的私有类。 这是错误:

Network.hpp:411:5: error: need ‘typename’ before ‘Network<V>::internal_edge_store_mechanism:: const_iterator’ because ‘Network<V>::internal_edge_store_mechanism’ is a dependent scope
Network.hpp:411:46: error: expected ‘;’ before ‘itr’
Network.hpp:412:12: error: ‘itr’ was not declared in this scope

为什么使用auto使代码有效?为什么编译器认为我需要“typename”?

0 个答案:

没有答案