从函数直接返回类实例的要求?

时间:2010-07-04 01:48:14

标签: c++ class

我在C ++中有一个包装输出流构造函数的函数,因此它可以传入指向它正在运行的父类的指针,ala:

pf_istream PF_Plugin::pf_open_in() {
    return     pf_istream(this);
}

但是当我这样做的时候,我会得到这样的结果:

  

pf_plugin.cc:103:错误:没有匹配   呼叫功能   “pf_istream :: pf_istream(pf_istream)”

     

pf_istream.hh:36:注意:候选人   是:pf_istream :: pf_istream(const   PF_Plugin *)

     

pf_istream.hh:29:注意:pf_istream :: pf_istream(pf_istream&)

我已经定义了一个复制构造函数和赋值运算符(如上所示),如果我像这样编写函数:

pf_istream PF_Plugin::pf_open_in() {
   pf_istream to_ret(this); 
   return     to_ret;
}

它运作得很好。如果我尝试直接从函数调用中分配pf_istream实例,我会得到类似的错误,例如:

pf_istream inFile = pf_open_in();

我需要添加什么才能使其发挥作用?

1 个答案:

答案 0 :(得分:2)

> pf_istream::pf_istream(pf_istream&)

这是你的问题。它没有正确找到你的拷贝构造函数,因为它传递了一个临时的。您的复制构造函数应该采用const&,如下所示:

pf_istream::pf_istream(const pf_istream&) { ... }
相关问题