派生*からベース*への変換は存在しますが、アクセスできません


88

cが構造体であり、デフォルトでパブリック継承があるのに、次のコードでこのエラーが発生するのはなぜですか?

struct c 
{
protected:
    int i;
public:
    c(int ii=0):i(ii){}
    virtual c *fun();
};

c* c::fun(){
    cout<<"in c";
    return &c();
}

class d : c
{
 public:
    d(){}
    d* fun()
    {
        i = 9;
        cout<<"in d"<<'\t'<<i;
        return &d();
    }
};


int main()
{
    c *cc;
    d dd;
    cc = &dd;
    cc->fun();
}

回答:


168

必要なもの:

class d : public c

class継承はprivateデフォルトです。

aclassまたはaから個人的に継承する場合struct、特に、派生型から基本型への直接変換は不可能であると明示的に言います。


グリゴア氏は再び勝利を収めました。あなたの親切な先生に感謝!あなたの答えは本当に役に立ちます!
M.Ionut
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.