首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将pimpl-idiom实例从子实例传递到父实例?

如何将pimpl-idiom实例从子实例传递到父实例?
EN

Stack Overflow用户
提问于 2019-09-17 23:10:54
回答 1查看 143关注 0票数 0

我有一个父类和一个子类,它们都有一个Pimpl类实现。我希望在子类中创建pimpl的一个实例,并通过将子类的构造函数传递给父类将其传递给父类。

我尝试创建一个父类的构造函数,它以impl类为参数,然后从子类的构造函数中调用此构造函数。

代码语言:javascript
复制
//ParentInterface.h

class impl; //  error message is here after I add the constructor with parameter

class ParentInterface {
public:

    ParentInterface();

    ParentInterface(impl *pimpl);

    virtual ~ParentInterface();
    ParentInterface(const ParentInterface& orig);


private:
    class impl;
    impl* pimpl;

};


//ParentInterface.cpp

class ParentInterface::impl
{
  public:
    virtual ~impl(){}
    MLB_API temp[1];

  private:
};

ParentInterface::ParentInterface():pimpl(new impl()){

}

ParentInterface::ParentInterface(impl *pimpl_){
     pimpl = pimpl_;
}

ParentInterface::~ParentInterface() {
    delete pimpl;
    pimpl = NULL;
}

每当我添加接受impl类的构造函数时,第一个class impl;行就会出错。以下各行是错误消息

代码语言:javascript
复制
changes meaning of ‘impl’ from ‘struct impl’

Unable to resolve forward declaration impl
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-18 01:08:18

编译器错误是由两个不同的class impl引起的:一个在全局范围内,另一个在ParentInterface范围内。ParentInterface构造函数接受全局class impl,而ParentInterface::pimpl的类型为class ParentInterface::impl

要修复编译器错误,请删除全局class impl

代码语言:javascript
复制
class ParentInterface {
protected: // Accessible to derived classes.
    class impl;
    impl* pimpl;

public:
    ParentInterface();
    ParentInterface(impl *pimpl);
    ~ParentInterface();
};

class ParentInterface::impl
{
public:
    virtual ~impl() {}
};

ParentInterface::ParentInterface()
    : pimpl(new impl)
{}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57977259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档