для использования шаблона класса требуется список аргументов шаблона и соответствующий конструктор по умолчанию

Я не уверен, где я сделал неправильно. Я пытаюсь передать имя строки и ключ из класса wrap в класс hashT

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; 
}

Класс wrap

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;
 }

1 ответ

  1. Класс wrapимеет несколько ошибок. hashT<class T>*шаблон не определяется как тип возврата.

    Вам придется написать:

    template<typename T>
    hashT<T> *getHashing() const {
        return mylist;
    }
    

    То же самое для setNextHash.

    Вы не можете сделать переменные шаблона, хотя, поэтому у вас есть только один способ определения mylist, делая wrapкласс шаблона так же, как hashT.