代码之家  ›  专栏  ›  技术社区  ›  gct

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

  •  0
  • gct  · 技术社区  · 15 年前

    我有一个C++函数,它封装一个输出流构造函数,这样它就可以传递一个指向它运行的父类的指针,

    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 PFI插件*

    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 回复  |  直到 15 年前
        1
  •  2
  •   Stephen    15 年前
    > pf_istream::pf_istream(pf_istream&)
    

    这是你的问题。它找不到您的复制构造函数,因为它传递了一个临时的。您的复制构造函数应采用 const& ,像这样:

    pf_istream::pf_istream(const pf_istream&) { ... }