C++使用Scope resolution运算符调用父类成员函数报错问题咨询
C++代码编译错误原因解答
错误核心原因
你在类B的public定义区域直接写的A::Output();是函数调用语句,而C++语法明确规定:类的定义体中仅允许出现成员声明、成员定义、友元声明、嵌套类型定义、静态常量成员初始化等结构,不允许直接放置普通执行语句,所以这一行直接违反语法规则,触发编译报错。
常见使用场景修正
如果你是想要在子类B重写的Output函数中调用父类A的原有实现,只需要把A::Output();移动到B的Output函数体内部即可,修改后的B类代码如下:
class B :public A { public: void Output() { A::Output(); // 函数体内部才可以执行函数调用逻辑 cout << " B "; } };
修改后运行程序会输出A B,符合虚函数重写的调用预期。
如果你的需求是不想重写父类的Output函数,完全不需要在子类中额外声明该函数,子类会自动继承父类的Output实现。
内容的提问来源于stack exchange,提问作者An Lê
相关产品推荐
相关产品推荐

