我写了以下代码:
class Osoba{
private:
string imie, nazwisko, kolorOczu;
friend void Dziecko::coutall();
public:
Osoba(string imie, string nazwisko, string kolorOczu):imie(imie), nazwisko(nazwisko), kolorOczu(kolorOczu){};
void coutall(){
cout << "Imie: " << imie << endl; //
cout << "Nazwisko: " << nazwisko << endl;
cout << "Kolor oczu: " << kolorOczu << endl;
}
};
class Dziecko: public Osoba{
private:
string nazwaPrzedszkola, choroba;
typedef Osoba super;
public:
Dziecko(string imie, string nazwisko, string kolorOczu, string nazwaPrzedszkola, string choroba):super(imie, nazwisko, kolorOczu), nazwaPrzedszkola(nazwaPrzedszkola), choroba(choroba){};
void coutall(){
cout << super::imie; // this one gets underlined.
cout << "Nazwa przedszkola: " << nazwaPrzedszkola << endl;
cout << "Choroba: " << choroba << endl;
}
};
这一行加了下划线:
cout << super::imie;
上面说它无法访问。但在我看来,它是--我“加”了这个方法。我尝试了一个类Dziecko的正向声明--也不起作用。我做错了什么?
发布于 2014-01-06 16:19:46
您似乎不能调用该方法,因为它使用类Osoba
的私有成员。
尝试将imie
用作受保护变量,而不是私有变量。
这是一个简短的explenation。
可用的两个选项是:
1) friend
整个类,这在使用继承时不是一个好的做法。
2)使用受保护的成员。这是在继承时访问私有成员的最佳方式。
发布于 2014-01-06 16:36:15
您不能这样做,因为在编译Osoba时没有定义Dziecko::coutall,并且在c++中没有进行前向成员方法声明的方法。相反,你可以和所有的Dziecko类成为朋友(正如Nbr44建议的那样)
https://stackoverflow.com/questions/20954195
复制