2013-04-18 162 views
0

最近,我已經開始學習C++了,這是我的第一個C++程序 - 但它不起作用。C++沒有匹配的構造函數

錯誤消息:

沒有匹配的構造函數 「文檔」 的初始化。

我使用的IDE是Xcode。

class Document { 

    private: 

    int doc_id; 
     int lan_id; 
     std::vector<int>::size_type n_total; 
     std::vector<int> words; 
     std::vector<int> counts; 

     inline int doc_type(){return (counts.empty() && !words.empty())? 1:0;}; 
    public: 

     Document(int docId) 
     { 
      doc_id = docId; 
      n_total = 0; 
     } 
     Document(int docId, int lanId) 
     { 
      lan_id = lanId; 
      doc_id = docId; 
      n_total = 0; 
     } 

     inline void add(int word, int count) 
     { 
      words.push_back(word); 
      counts.push_back(count); 
     } 
     inline void add(int word) { words.push_back(word);} 
     inline int word(int i) { return words[i]; } 
     inline int count() { return counts[1];}; 
     inline std::vector<int>::size_type size() { return n_total;}; 
     inline void setSize(std::vector<int>::size_type total){ n_total = total;}; 
     inline std::vector<int>::size_type types() { return words.size();} 

     ~ Document() 
     { 
      words.clear(); 
      counts.clear(); 
     } 
    }; 
+0

無論您在何處製作對象,都必須調用現有的構造函數。 – chris

+2

您的構造函數是私有的。 –

+0

你如何創建一個文檔的實例? – carlosdc

回答

3

我的猜測是,你正在試圖實例您Document類使用默認構造函數,但是,你不必在你的代碼中定義的默認構造函數。 你只定義構造函數的兩個重載版本中您的公共部分:

Document(int docId, int lanId) 

Document(int docId) 

如果實例化對象,如下所示

Document d; 

它會給你編譯錯誤因爲編譯器無法找到默認的構造函數來完成對象的創建。同時,你已經定義了你自己的構造函數,所以編譯器不會爲你生成一個默認的構造函數。

此外,你有幾個地方放置冗餘分號,這是容易出錯,不應該在那裏。

例如:

inline int doc_type(){return (counts.empty() && !words.empty())? 1:0;}; 
                    //^^^^ 
inline int count() { return counts[1];}; 
inline std::vector<int>::size_type size() { return n_total;}; 
inline void setSize(std::vector<int>::size_type total){ n_total = total;}; 
+0

非常感謝。我沒有任何參數實例化Document對象。 –

+0

@ user2293003非常受歡迎。 – taocp

2

的問題是在您嘗試創建這種類型的對象,你還沒有表現出我們的代碼。您需要使用已定義的構造函數:

Document d1(docId); 
Document d2(docId, lanId); 

我的胡亂猜測是,你要通過缺省方式構造一個:

Document d; 

類沒有(或許不應該)有一個默認的構造函數Document(),所以這不起作用。

+0

謝謝你的幫助。我使用了一個默認構造。 –

相關問題