【发布时间】:2020-03-16 05:40:43
【问题描述】:
我正在尝试为 Clib 类编写一个复制构造函数,该类派生自没有默认构造函数的 Cotherlib 我的原始代码包含一个深拷贝操作和 wat 来纠正另一个返回 CLib 对象的 c 函数,因此需要一个复制构造函数 #include "stdafx.h"
struct IMem
{
virtual void function_f_1() = 0;
virtual void function_f_2() = 0;
};
class MyMem : public IMem
{
public:
void function_f_1()
{
}
void function_f_2()
{
}
};
class CDependentLib1
{
public:
CDependentLib1()
{
}
~CDependentLib1()
{
}
};
class CDependentLib2
{
public:
CDependentLib2()
{
}
~CDependentLib2()
{
}
};
class COtherLib
{
public:
COtherLib(IMem &Mem, CDependentLib2 &objDependentLIb2)
{
}
~COtherLib()
{
}
};
class CLib : public COtherLib
{
public:
CLib(IMem &mem):
m_1(),
m_2(),
COtherLib(mem,m_2)
{
}
~CLib()
{
}
CLib(const CLib &ObjClib)// here i am getting error
{
}
private :
CDependentLib1 m_1;
CDependentLib2 m_2;
};
int main()
{
MyMem ObjMem;
CLib objLib(ObjMem);
return 0;
}
如何创建复制构造函数。我无权编辑基类代码并添加默认构造函数
【问题讨论】:
-
如果不存在默认构造函数,我不明白为什么编写复制构造函数会有问题。对于您显示的代码
A无法构造,因为您显示的每个构造函数都需要一个已经存在的A实例作为参数。所以没有办法创建A的实例。因此,如果您至少有一个不需要a实例的构造函数,如果工作demo on wandbox。因此,请显示您的问题的minimal reproducible example,A(const A &ObjA)失败并解释您在此处失败的意思。 -
请显示minimal reproducible example,大概你有一个引用成员,这使得实现复制构造函数变得不可能
-
A 类 { int i; public: A(Someclass & objSomeClass): b(objSomeClass), c(objSomeClass)// 对象的构造依赖于另一个类对象 { . } A(const A &ObjA) // 这里会失败,因为类 A 没有默认构造函数 { } };
-
@HareeshkumarKaiprath 不要在评论部分粘贴代码,edit 你的问题,而不是添加该信息。而minimal reproducible example 意味着您需要创建一个简单的完整代码示例,可以复制、编译然后导致您遇到的错误。那些不完整的代码片段对追踪你的问题没有帮助,因为对于没有默认构造函数的类,这些都不应该导致创建复制构造函数的问题。
标签: c++ constructor copy