我正在做一个C++测验,我需要在下面的代码中说明什么错误:
class Base {
friend class SubClass;
int n;
virtual int getN()
{
return n;
}
};
class SubClass: public Base {
public:
SubClass() {}
SubClass(const SubClass& s) {}
};
int main()
{
SubClass sc;
if(sc.getN() <= 5)
{
int x = sc.getN();
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
除了n是没有资源的,也许应该通过Base类指针创建对象,还有什么可能是错的?
当我运行它时,我收到此错误:
error: 'virtual int Base::getN()' is private
Run Code Online (Sandbox Code Playgroud)
Naw*_*waz 14
作为默认的一类的每一个成员1是private,getN在基类被声明private.
让getN公众:
class Base {
friend class SubClass;
int n;
public: //<--------------------- you forgot this
virtual int getN()
{
return n;
}
};
Run Code Online (Sandbox Code Playgroud)
我的意思是,用关键字定义的类class.注意,类可以用关键字来定义struct和union为好,根据C++标准.
编辑:
如果你认为因为SubClass是朋友Base,所以它可以Base从外部访问私人成员,那就错了.friend表示SubClass可以访问Base类的私有成员的成员函数.
但是,如果你交了main()朋友Base,那么你的代码就可以了:
class Base {
friend int main(); //make main() friend of Base
//...
};
Run Code Online (Sandbox Code Playgroud)
现在main(),Base可以访问任何私人会员!
请参阅此演示:http://www.ideone.com/UKkCF