2014-05-13 91 views
0

這是一種複雜的問題。使用cstring類型的模板作爲非模板類​​的數據成員

class Stats { 
public: 
    Stats(); 

     // some functions 

    QuadraticHashTable<char[4]> teamHash; 
}; 

由於要求,我必須使用模板QuadraticHashTable來器C風格字符串,我必須定義在類統計一QuadraticHashTable類型的數據成員,這是不是一個模板。

任何人都可以告訴我我的聲明有什麼問題嗎?編譯器不斷告訴我,

「呼叫沒有匹配功能‘QuadraticHashTable :: QuadraticHashTable()’ 」

順便說一句,我還沒有初始化的數據成員在構造函數統計

謝謝您。對於QuadraticHashTable

 template <class HashedObj> 
     class QuadraticHashTable 
     { 
      public: 
      explicit QuadraticHashTable(const HashedObj & notFound, int size = 101); 
      QuadraticHashTable(const QuadraticHashTable & rhs) 
       : array(rhs.array), ITEM_NOT_FOUND(rhs.ITEM_NOT_FOUND), 
       currentSize(rhs.currentSize) { } 

      const HashedObj & find(const HashedObj & x) const; 

      void makeEmpty(); 
      void insert(const HashedObj & x); 
      void remove(const HashedObj & x); 

      const QuadraticHashTable & operator=(const QuadraticHashTable & rhs); 

      enum EntryType { ACTIVE, EMPTY, DELETED }; 
///////////////////////////////////////////////////// 
      friend class Stats; 
///////////////////////////////////////////////////// 
      private: 
      struct HashEntry 
      { 
       HashedObj element; 
       EntryType info; 

       HashEntry(const HashedObj & e = HashedObj(), EntryType i = EMPTY) 
        : element(e), info(i) { } 
      }; 

      vector<HashEntry> array; 
      int currentSize; 
      const HashedObj ITEM_NOT_FOUND; 
      bool isPrime(int n) const; 
      int nextPrime(int n) const; 
      bool isActive(int currentPos) const; 
      int findPos(const HashedObj & x) const; 
      int hash(const string & key, int tableSize) const; 
      int hash(int key, int tableSize) const; 
      void rehash(); 
     }; 
+0

我們需要'QuadraticHashTable'的頭文件代碼來幫助你。 –

+0

我不認爲它有問題,因爲它是由教授提供的模板代碼 – Bruce

+1

該類是否具有默認構造函數 – rerun

回答

0

該類

代碼有沒有默認構造函數。無論何時你的類有一個沒有默認構造函數的成員,當你構造你的對象時,你必須明確地調用一個非默認構造函數。如果該成員具有默認(讀取無參數)構造函數,則默認調用該構造函數。

例如下面再現您的問題

template <class T> 
class Member 
{ 
public: 
    Member(T obj) 
     :m_obj(obj) 
    { 

    } 
private: 
    T m_obj; 
}; 

class Owner 
{ 
public: 
    Owner() 
    { 
    } 

private: 
    Member<int> m_member; 
}; 

在VS,我得到一個稍微清晰的錯誤信息錯誤「會員」:可用沒有適當的默認構造函數,但其​​同樣的問題,編譯器不會知道如何在這種情況下建立一個成員,因爲你沒有告訴它如何構建它。

如果我在初始化期間更改Owner類以調用相應的構造函數,編譯器現在知道如何構造您的對象。

class Owner 
{ 
public: 
    Owner() 
     :m_member(4) 
    { 
    } 

private: 
    Member<int> m_member; 
}; 
+0

非常感謝,重新運行。我只是通過將數據成員teamTable指向QuadraticHashTable 來修復它。但這裏還有一個問題(這就是爲什麼我說這有點複雜)。由於模板的類型名是,我不知道如何在Stat構造函數中初始化數據成員teamHash。 – Bruce

+0

在Stat構造函數中,我使用teamHash = new QudraticHashTable ('\ 0',30); notfound變量總是會造成一些麻煩。我不知道要修復它。 – Bruce

相關問題