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;

}

「ePair e(a,b)」を使用してペアを作成しているときに、「template2.cpp:39:2: エラー: 'G::ePair' はテンプレートではありません」というエラーが表示されます。このコンパイルの理由が正確にはわかりません。エラーが来ていますか?ここで何か不足していますか?

4

1 に答える 1

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;
}
于 2012-02-08T11:20:56.760 に答える