0

テンプレートの1つにあるメソッド内でイテレータをインスタンス化しています。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」が必要だと考えるのはなぜですか?

4

0 に答える 0