2012-09-27 39 views
0

以下是我的代碼。我正在使用GNU G ++編譯器。我得到錯誤「main.cpp:在函數'int main()': main.cpp:12:9:錯誤:'class hash'沒有名爲'printVectorContents'的成員」C++中的模板類

我知道我在俯瞰有些愚蠢我不能把手指放在它上面。任何幫助?

int main() 
{ 
    std::cout << "Yeah you did dat"<<std::endl; 
    hash<int> newHash; 
    newHash.printVectorContents(); 
    std::cin.get(); 
    return 0; 
} 

和我的模板類...

template <class dataTypeClass> class hash{ 
private: 
    std::vector <dataTypeClass> hashVector; 
    std::string mName; 
public: 
    hash(){} 
    hash(std::string aName = "unnamedHash"):mName(aName),hashVector(100,NULL){} 
    ~hash(){std::cout<<"Hash "<<mName<<"destructing!";} 
    void addHashItem(dataTypeClass aHashItem, std::string akey){} 
    int hashFunction(dataTypeClass hashItem){return 0;} 
    void printVectorContents() 
    { 
     for (typename std::vector<dataTypeClass>::iterator i = hashVector.begin(); i<hashVector.rend(); i++) 
     { 
      std::cout<< *i << std::endl; 
     } 
    } 
}; 
+3

有沒有可能'hash '是指'std :: hash '而不是你的班級模板?由於您顯然沒有展示完整的翻譯單元,因此很難說出您翻譯單元中的內容。 –

+1

你使用什麼編譯器?看起來,它看起來像19xx年的Borland Turbo C++ 3.0。你的代碼還有其他一些由現代編譯器發現的錯誤。 – Torsten

+1

你確定你沒有在printVectorContents()中出錯嗎?例如。在「i

回答

5
  1. hash一個共同的名字,讓它myhash等,或將其放入自己的命名空間,以避免名稱衝突。

  2. 刪除hash(){}。當你聲明hash<int> myhash;時,你有一個構造函數已經使用了一個默認參數,它不知道要調用哪個構造函數。

  3. 更改i<hashVector.rend()i != hashVector.end()

  4. hashVector(100,NULL)更改爲hashVector(100)

+1

@EmilioGaravaglia:謝謝,編輯。 –

+0

這些都是我需要改變的東西,謝謝。雖然他們沒有解決我最初的錯誤。我開始意識到我有一個頭文件和一個模板類的cpp文件,這是錯誤的。這是我的大部分問題。 http://bit.ly/UNpwY9我從C#開始回到C++一段時間,我有點冒險嘗試一次做太多事情。 –