Я пытаюсь понять, почему следующий код не компилируется, по-видимому, решение зависит от конкретного объявления зависимости от метода_А в производном классе. Пожалуйста, обратитесь к следующему коду:
class Base
{
public:
void method_A(int param, int param2)
{
std::cout << "Base call A" << std::endl;
}
};
//does not compile
class Derived : public Base
{
public:
void method_A(int param)
{
std::cout << "Derived call A" << std::endl;
}
};
//compiles
class Derived2 : public Base
{
public:
using Base::method_A; //compile
void method_A(int param)
{
std::cout << "Derived call A" << std::endl;
}
};
int main ()
{
Derived myDerived;
myDerived.method_A(1);
myDerived.method_A(1,2);
Derived2 myDerived2;
myDerived2.method_A(1);
myDerived2.method_A(1,2);
return 0;
}
"test.cpp", (S) Неправильное количество аргументов указано для "Derived:: method_A (int)".
Какова техническая причина, которая мешает тому, чтобы производный класс знал свой базовый класс, реализует метод, который он пытается перегрузить? Я лучше понимаю, как в этом случае ведет себя компилятор/компоновщик.