B都没有在A上继承肯定错了,我想你的原意是在A上继承了。但如果这样继承之后,若要在B中定义F函数,你B中的F函数的定义必须要定义一个与A的定义原形一样这样才能保证隐藏基类的函数,或者不定义F函数,注意,重载不能在父类与子类之间进行必需是同一个类内,父类与子类之间只存在隐藏与覆盖的关系你的程序可以改成下面的两个都行。
class A{
public: void f(){};
};
class B:public A{
public: void f(int x){};
void f(){};//若定义F函数这个必需有
};
int main(){
B b;
b.f();//为什么这个是错的
b.f(2);
return 0;
}
class A{
public: void f(){};
};
class B:public A{
//或者什么都别定义
};
int main(){
B b;
b.f();
return 0;
}