2013-04-18 120 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

谢谢你的帮助。我使用了一个默认构造。 –

相关问题