我有一个父类和一个子类,它们都有一个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发布于 2019-09-18 01:08:18
编译器错误是由两个不同的class impl引起的:一个在全局范围内,另一个在ParentInterface范围内。ParentInterface构造函数接受全局class impl,而ParentInterface::pimpl的类型为class 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)
{}https://stackoverflow.com/questions/57977259
复制相似问题