/*Process.h*/
class Process {
public:
Process(ProcessID thirdParty_pid);
protected:
void createImpl();
private:
ProcessImpl * _impl;
};
/*ProcessImpl.h*/
class ProcessImpl {
public :
ProcessImpl(ProcessID thirdParty_pid);
}
现在使用PIMPL惯用法我试图以这种方式调用ProcessImpl构造函数:
Process::Process(ldframework::ProcessID tpid):_impl(ldframework::ProcessImpl::ProcessImpl(tpid)) {
}
但我收到了以下错误 错误:无法在初始化
中将ProcessImpl转换为ProcessImpl *请帮助解决此错误,并让我知道正确的metrhod调用
答案 0 :(得分:1)
由于_impl
是指针,因此必须使用指针初始化它:
Process::Process(ldframework::ProcessID tpid)
: _impl(new ldframework::ProcessImpl::ProcessImpl(tpid))
{ ... }
请注意new
初始化中使用_impl
关键字。
答案 1 :(得分:1)
_impl
是指针(PIMPL =>指向实施的指针)。
因此,请使用new
关键字进行初始化。
Process::Process(ldframework::ProcessID tpid)
:_impl( new ldframework::ProcessImpl::ProcessImpl(tpid)) {
}
但是将PIMPL用于smart_pointers
,因此请阅读Sutter about compilation firewalls!
答案 2 :(得分:0)
您的表达式ldframework::ProcessImpl::ProcessImpl(tpid)
评估为键入ProcessImpl
,这与您的成员ProcessImpl*
的类型_impl
不同。
尝试在初始化列表中使用new
,并在析构函数中记住delete
。
e.g。
: _impl( new ldframework::ProcessImpl::ProcessImpl(tpid) )
以及稍后的析构函数
delete _impl;