2012-02-08 11 views
0
template<class V, class E> 
class G 
{ 
    public: 
      G(); 
      void InsertVertex(const V&); 
      void InsertEdge(const V&, const V&, const E&); 
    private: 
      typedef set<V,less<V> > vSet; 
      typedef pair<const V,V> ePair; 
      typedef multimap<V,V,less<V> > eSet; 
      typedef map<ePair,E, less<ePair> > edgeValueMap; 
      vSet vertices; 
      eSet edges; 
      edgeValueMap edgeVals; 

}; 

template<class V,class E> 
G<V,E>::G(){} 

template<class V,class E> 
void G<V,E>::InsertVertex(const V& a) 
{ 
    vertices.insert(a); 
} 

template<class V,class E> 
void G<V,E>::InsertEdge(const V& a,const V& b, const E& val) 
{ 
    //create a pair 
    ePair<const V,v> e(a,b); 
    edges.insert(e); 
    edgeVals.insert(e,val); 

} 


int main() 
{ 
    G<char,int> g; 
    g.InsertVertex('a'); 
    g.InsertVertex('b'); 
    g.InsertVertex('c'); 
    g.InsertEdge('a','b',1); 
    return 0; 

} 

i "はePair電子(a、b)は、" 私は取得していますエラーを使用してペアを作成しながら、: I "template2.cpp:39:2:エラー 'G :: ePairは、' テンプレートではありません"このコンパイルエラーがなぜ起こっているのか正確にはわからないのですか?ここに何かがないのですか?このテンプレートペアをC++で初期化する方法は?

+3

ePairが既にテンプレートパラメータでtypedef''dのstd ::ペア 'ですので、私はまた、修正しました。 –

+0

「ePair」の宣言を表示してください。 –

答えて

0

私は実際のマップエントリを作成するためにmake_pairを使用していましたが、ここで動作します。しかし、ノートもコールedgeVals.insert(e,val);ギブ・エラーはその:

template<class V,class E> 
void G<V,E>::InsertEdge(const V& a,const V& b, const E& val) 
{ 
    //create a pair 
    ePair e = make_pair(a,b); 
    edges.insert(e); 
    edgeVals[e] = val; 
} 
+0

素晴らしいです。どうもありがとう。 – namus

関連する問題