gpt4 book ai didi

c++ - 如何将 pimpl-idiom 实例从 child 传递给 parent ?

转载 作者:行者123 更新时间:2023-11-28 04:10:11 24 4
gpt4 key购买 nike

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

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

//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; 行就会出错。以下几行是错误信息

changes meaning of ‘impl’ from ‘struct impl’

Unable to resolve forward declaration impl

最佳答案

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

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

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)
{}

关于c++ - 如何将 pimpl-idiom 实例从 child 传递给 parent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57977259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com