использование ключевого слова для обнародования защищенного перегруженного метода [duplicate]

0

Я попытался найти решение этой проблемы, но я не смог найти ее. Это мой класс:

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) защищен

Как можно указать точный метод использования?

Теги:
unit-testing
using

1 ответ

1
Лучший ответ

FakeClass может использовать конструктор MyClass, но везде, где вы создаете свой FakeClass нельзя - это не друг или производный тип.

Вам придется написать public конструктор FakeClass, и это должно быть тем, что вызывает защищенный конструктор MyClass:

FakeClass(std::shared_ptr<X> p)
: MyClass(p)
{ }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню