2016-11-07 20 views
0

私はどこが間違っているのか分かりません。私はクラスhashTにクラスラップから文字列名とキーを渡すためにattempingてるクラステンプレートの使用にはテンプレート引数リストが必要で、適切なデフォルトコンストラクタがありません

C2955:「hashTは」:クラステンプレートを使用すると、テンプレート引数リストが必要

C2512:「hashT」:なし適切なデフォルトコンストラクタ利用可能

template<class T> 
class hashT{ 
public: 
    hashT(const int newKey, const string newName= "") :theList(newKey,newName){ 
     key = newKey; 
     name = newName; 
     theList.push_back(key); 
     theList.push_back(name); 
    } 

    hashT & operator=(const hash &rhs) { 
      if (this != &rhs) { 
      key = rhs.getKey(); 
      name = rhs.getName(); 
      desc = rhs.getDes(); 
     } 
     return *this; 
    } 


private: 
    vector<T>theList; 
    int key; 
    string name; 
} 

クラス

class wrap{ 
    public: 
    wrap(){ myList = new hashT[1000]; 

    ~wrap(){ delete[]myList;} 

    //getter 
    hashT<class T> *getHashing() const{ 
     return mylist; 
     } 

    //setter 
    void setNextHash(hashT<class T> *hashelement){ 
     mylist = hashelement; 
     } 

    private: 
     hashT<class T> *mylist; 
} 

答えて

0

あなたのクラスwrapを包む複数のエラーがあります。 hashT<class T>*これは戻り値の型としてテンプレートを定義する方法ではありません。

あなたは記述する必要があります:

setNextHashのための同じ
template<typename T> 
hashT<T> *getHashing() const { 
    return mylist; 
} 

テンプレート変数を作成することはできません。を定義する方法が1つのみで、wraphashTのようなテンプレートクラスになります。

+0

'hashT * mylist;'のようなメンバーを宣言することはできません – Danh

+0

@ダンJupは、その申し訳ありませんを忘れてしまった:)ありがとう – Rakete1111

関連する問題