Я попытался найти решение этой проблемы, но я не смог найти ее. Это мой класс:
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) защищен
Как можно указать точный метод использования?
FakeClass
может использовать конструктор MyClass
, но везде, где вы создаете свой FakeClass
нельзя - это не друг или производный тип.
Вам придется написать public
конструктор FakeClass
, и это должно быть тем, что вызывает защищенный конструктор MyClass
:
FakeClass(std::shared_ptr<X> p)
: MyClass(p)
{ }