我试图搜索此问题的解决方案,但我找不到任何问题。 这是我的班级:
class X;
class MyClass
{
public:
MyClass();
protected:
// ctor for unit test
MyClass(std::shared_ptr<X> p_x);
};
在单元测试中:
class FakeClass : public MyClass
{
public:
using MyClass::MyClass;
};
在测试中我想使用它:
FakeClass myFake(std::shared_ptr<X>(new X));
但是g ++说:
MyClass :: MyClass(std :: shared_ptr)受保护
如何指定使用的确切方法?
答案 0 :(得分:1)
FakeClass
可以使用MyClass
构造函数,但无论您从哪里构建FakeClass
,都可以 - 它不是朋友或派生的类型。
您必须编写public
FakeClass
构造函数,而这必须是调用MyClass
受保护构造函数的内容:
FakeClass(std::shared_ptr<X> p)
: MyClass(p)
{ }