我在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();
我需要添加什么才能使其发挥作用?
答案 0 :(得分:2)
> pf_istream::pf_istream(pf_istream&)
这是你的问题。它没有正确找到你的拷贝构造函数,因为它传递了一个临时的。您的复制构造函数应该采用const&
,如下所示:
pf_istream::pf_istream(const pf_istream&) { ... }