2016-04-23 8 views
0

Boost unordered map containerのラッパーメソッドを書いていました。 boost unordered Mapには、begin()メソッド があり、最初の要素にイテレータを返します。私のラッパーでは、私はtemplatizedラッパーを書くことを試みる。たとえば、boost :: unordered_mapでテンプレート引数を指定する際のコンパイルエラー

template< class Tkey, class Tvalue> 
class CMyUnorderedMap 
{ 
     boost::Unordered_map<TKey, TValue> m_myMap; 
    public: 
     boost::unordered_map<TKey, TValue>::iterator Begin(); 

}; 

template< class Tkey, class Tvalue> 
boost::unordered_map<TKey, TValue>::iterator CMyUnorderedMap< TKey, TValue >::Begin() 
{ 
    return m_myMap.begin() 
} 

上記のコードを(テンプレート引数を使用して)コンパイルすると、次のようにVS 2010でコンパイルエラーが発生します。

warningc4346:boost :: unordered :: unordered_map < TKey、TValue> :: iterator:従属名は型ではありません。

エラーC3860テンプレート引数リストの次クラステンプレート名がtempateののparamaterリスト

で使用されるためにPARAMATERSをリストする必要があります。しかし私は、テンプレート引数を指定してコードをコンパイルする場合、コードは準拠しています。それは

boost::unordered_map< std::string, std::string>::iterator Begin(); 

の作品を下回るように指定した場合、例えば ウィル1つのヘルプ

答えて

-1

私は

class CMyUnorderedMap 
{ 

    boost::Unordered_map<TKey, TValue> m_myMap; 
public: 
typename boost::unordered_map<TKey, TValue>::iterator Begin(); 

}; 

template< class Tkey, class Tvalue> 

機能のdeclerationとdefenitionにキーワード型名を追加しました以下のようなコードを変更した後、それが働きました

typename boost::unordered_map<TKey, TValue>::iterator CMyUnorderedMap< TKey, TValue >::Begin() 

{ 

    return m_myMap.begin() 
} 
0

クラステンプレートの体外クラステンプレートのメンバ関数を定義し、テンプレートの詳細を指定する必要があります任意の。

あなたのケースでは、あなたが使用する必要があります。

template< class Tkey, class Tvalue> // Missing from your code. 
boost::unordered_map<TKey, TValue>::iterator CMyUnorderedMap< TKey, TValue >::Begin() 
{ 
    return m_myMap.begin() 
} 
+0

@R Sahu i指定されたクラスのテンプレートは、コンパイルエラー – Ushus

+2

@Ushus、[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)、およびコンパイラのエラーメッセージを投稿してください。コメントを通じて話すのは生産的ではありません。 –

関連する問題