Добавление наследника вместо базового класса в emplace_back приводит к ошибке C2243

#include <vector>

class A {};

class C {
public:
    C(A*);
};

class B : A {
    void DoSomething()
    {
        std::vector<C> v;
        v.emplace_back(this);
    }
};

Пытаюсь добавить в вектор некоторый класс, который ожидает указатель на базовый класс в конструкторе, передавая ему наследника. Если использовать push_back, то всё работает. При emplace_back же возникает ошибка:

error C2243: 'type cast': conversion from '_Ty' to 'A *' exists, but is inaccessible

В чём причина этой ошибки? Как исправить?


Ответы (1 шт):

Автор решения: Harry

Добавьте public в объявление наследования

class B : public A {

Полный код: https://ideone.com/R6w3iK

→ Ссылка