-2
/*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*

请帮助解决此错误,并让我知道调用正确的方法

4

3 回答 3

1

_impl是一个指针(PIMPL => 指向实现的指针)

因此,使用new关键字进行初始化。

Process::Process(ldframework::ProcessID tpid)
  :_impl( new ldframework::ProcessImpl::ProcessImpl(tpid)) {
}

但是使用 PIMPL smart_pointers,因此,请阅读Sutter 关于编译防火墙

于 2013-07-29T08:21:49.940 回答
1

因为_impl是一个指针,所以你必须用一个指针来初始化它:

Process::Process(ldframework::ProcessID tpid)
    : _impl(new ldframework::ProcessImpl::ProcessImpl(tpid))
{ ... }

注意new在初始化的时候关键字的使用_impl

于 2013-07-29T08:19:01.470 回答
0

您的表达式ldframework::ProcessImpl::ProcessImpl(tpid)计算为 type ProcessImpl,它与 typeProcessImpl*不同,即您的成员的类型_impl

尝试new在你的初始化列表中使用,并记住delete在你的析构函数中。

例如

: _impl( new ldframework::ProcessImpl::ProcessImpl(tpid) )

稍后在你的析构函数中

delete _impl;
于 2013-07-29T08:18:22.123 回答