2017-03-15 17 views
1
 static int index = 0; 
     class neighbor 
     { 
      public: 
        int dest ; 
        int weight; 
        neighbor(int d= 0, int w= 0); 
     }; 
     template<typename T> 
     class vertexInfo 
     { 
      public: 
        enum vertexColor { white , grey , black } ; 
        typename map< T, int>:: iterator vtxMapLoc; 
        set<neighbor> edges; 
        vertexInfo(); 
         // default constructor 
        vertexInfo(const map<T, int> :: iterator& iter) 
        { 
         // constructor with iterator pointing to a vertex in map     
        } 
        int inDegree; 
     }; 
     template <typename T> 
     class graph 
     { 
      private: 

        typename map< T, int > :: iterator iter; 
        map <T,int> vtxMap; 
        vector<vertexInfo<T> > vInfo; 
        int numVertices; 
        int numedges; 
        stack<int> availStack; 
        int getvInfoIndex(graph<T>& , const T& v); 
      public: 
        void addEdge(graph<T>& , const T& , const T& , int); 
        set<T> get_Neighbor(graph<T>& , const T& v) ; 
        void show(graph<T>&); 

     };  

template <typename T> 
void graph<T> :: addEdge (graph<T> & g, const T& v1 , const T& v2, int w) 
{ 
    pair <map <char, int> :: iterator, bool> ret ; 

    ret = g.vtxMap.insert(pair <char, int >(v1, index)); 

    if(ret.second) 
    { 
     index++; 
     g.vInfo.push_back(vertexInfo<T>(index));// Error -> 1 

     } 

    ret = g.vtxMap.insert(pair <char, int >(v2 , index)); 

    if(ret.second) 
    { 
     index++; 
     g.vInfo.push_back(index)); // Error -> 2 
     } 
    } 

私はベクトルに"index"の値をプッシュしたいと思います。しかし、エラーを得る。呼び出しの一致機能がありません

Error 1 - > `No matching function for call to 'vertexInfo<char>:: vertexInfo(Int&)`  
Error 2 -> `No matching function for call to std :: vector <vertexInfo<char> , std :: allocator <vertexInfo<char> > > push_back(int&)` 

両方の方法で要素をプッシュしようとしましたが、まだエラーが発生しました。
このエラーを取り除くには?

UPDATE :  

私はコードの本体を更新しました。 2つのコンストラクタを追加しました

vertexInfo() //Default constructor 

vertexInfo(const map<T, int> :: iterator& iter) 
{ 
    // constructor with iterator pointing to a vertex in map i.e. it is initializes the vtxMapLoc data member with the location of the vertex in the map. 
} 

コンストラクタ本体の記述方法を理解していません。

+0

[MCVE] – Jonas

答えて

0

最初のエラー

No matching function for call to 'vertexInfo<char>:: vertexInfo(Int&) 

は、引数としてInt(あなたのコード例では、変数indexのタイプを)取るタイプvertexInfo<char>にはコンストラクタがありませんことを意味します。単にそのようなコンストラクタを作成すれば、すべてが動作します。

第2のエラーについては、私にとっては達成したい動作が明確ではありません。 push_back の値をvectorvertexInfo<char>にしようとしています。対応するvertexInfo<char>を作成する場合は、最初の例のように、emplace_backまたはvertexInfo<T>のコンストラクタを使用することをお勧めします。とにかく、コンストラクタが定義されている必要があります。

+0

2つのコンストラクタが追加されていますが、本体の記述方法がわかりません。私はvertexInfo [iter] = vtxMapLocのようにしようとしましたが、間違っています。 – Tushar

+0

@Tusharあなたは唯一の引数として 'int'を受け入れるコンストラクタを追加しませんでした。 – alexeykuzmin0

+0

@Tusharコンストラクタでは、提供されたデータを使用して構造体を作成する(すべてのフィールドを設定する)必要があります。あなたがそれをする方法を知らなければ、私はそれほど多くはありません。 – alexeykuzmin0

関連する問題