我在 C++ 中有一个函数,它包装了一个输出流构造函数,因此它可以传递一个指向它在其中运行的父类的指针,ala:
pf_istream PF_Plugin::pf_open_in() {
return pf_istream(this);
}
然而,当我这样做时,我得到了这样的结果:
pf_plugin.cc:103: error: no matching function for call to ‘pf_istream::pf_istream(pf_istream)’
pf_istream.hh:36: note: candidates are: pf_istream::pf_istream(const PF_Plugin*)
pf_istream.hh:29: note: 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();
我还需要添加什么才能使这项工作正常进行?
最佳答案
> pf_istream::pf_istream(pf_istream&)
这是你的问题。它没有正确地找到你的复制构造函数,因为它正在传递一个临时的。您的复制构造函数应该采用 const&
,如下所示:
pf_istream::pf_istream(const pf_istream&) { ... }
关于c++ - 直接从函数返回类实例的要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3173441/