问题描述
#include <iostream>class ZZ{public: void print() {std::cout << 'hellon'; }};class YY : public ZZ{public: void print() {using ZZ::print;print(); }};int main(){ YY temp; temp.print(); getchar(); return 0;}
为什么上面的这段代码回报错?error: ’ZZ’ is not a namespace or unscoped enum using ZZ::print;
问题解答
回答1:因为你那个用法是错的,这个用法是c++11新增的
class YY : public ZZ{public: using ZZ::print;};
你写在成员函数里面,那么便成为了扩展一个成员函数的作用域,这当然不会成功。。
回答2:首先 main里的temp没初始化实例。。 然后你子类YY重载了父类的方法。别写USING,直接 ZZ::print();
回答3:在派生类中使用基类的public函数,要么你就直接不重写,要么你可以在派生类里的print函数中使用ZZ::print()调用。
回答4:using写错地方了!不应该写在成员函数内部!另外,两个print函数同名,会出现无限递归,应该给YY中的print重新起个名字!
class YY : public ZZ{public:
using ZZ::print;void YYprint(){ print();}
};

