У меня есть следующий фрагмент кода, и я ожидаю, что будет вызван конструктор из родительского класса First::Inner
.
class First {
public:
class Inner {
public:
Inner(int x) {}
virtual ~Inner() = default;
};
virtual Inner* begin() = 0;
};
class Second: public First {
public:
class Inner: public First::Inner {
};
Inner* begin() {
return new Inner(1);
}
};
int main()
{
Second s;
return 0;
}
Вместо этого я получил ошибку компиляции в компиляторе:
main.cpp: In member function ‘virtual Second::Inner* Second::begin()’:
main.cpp:16:31: error: no matching function for call to ‘Second::Inner::Inner(int)’
Работает, если весь конструктор Inner(int x) {}
перемещен из базового класса First::Inner
в производный Second::Inner
. Но я бы хотел оставить конструктор в базовом классе.
Что не так с кодом и как я могу исправить ошибку?