C ++中的朋友方法不起作用

时间:2014-01-06 16:13:24

标签: c++ visual-studio-2010 class friend

我写了以下代码:

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类的前瞻声明 - 也没用。我做错了什么?

2 个答案:

答案 0 :(得分:0)

您似乎无法调用该方法,因为它使用类Osoba的私有成员。

尝试将imie用作受保护变量,而不是私有。

这是一个简短的explenation

可用的2个选项是:

1)friend整个班级,在使用继承时不是一个好习惯。

2)使用受保护的成员。这是访问继承私有成员的最佳方式。

答案 1 :(得分:0)

你不能这样做,因为在编译Osoba时没有定义Dziecko :: coutall,并且c ++中没有任何方法可以进行前向成员方法声明。相反,你可以成为所有Dziecko类的朋友(如Nbr44建议的那样)