Я хотел бы, чтобы метод в базовом классе вызывал чисто виртуальный метод, который будет реализован в производном классе. Однако метод без параметров базового класса, похоже, не наследуется производным классом. Что я делаю неправильно? Компилятор MSVC12.
ошибка C2660: «Derived :: load»: функция не принимает 0 аргументов
Вот полный пример (который не компилируется из-за ошибки):
struct Base
{
void load() { load(42); }; // Making this virtual doesn't matter.
virtual void load(int i) = 0;
};
struct Derived : Base
{
virtual void load(int i) {};
};
int main()
{
Derived d;
d.load(); // error C2660: 'Derived::load' : function does not take 0 arguments
}
О, производный класс делает унаследовать void load()
,
Но вы декларируете void load(int i)
в производном классе, что означает, что это затенено.
добавлять using Base::load;
в Derived
добавить все не переопределенные определения load
от Base
к перегрузке в Derived
,
Или позвоните Base
-class-version явно с оператором scope-resolution d.Base::load();
,
Вы должны позвонить Base
одно явно: d.Base::load();
, Понятия не имею почему, но это работает. Я предполагаю, что переопределение скрывает все перегрузки.