chuyển đổi từ có nguồn gốc * sang cơ sở * tồn tại nhưng không thể truy cập được


88

Tại sao mã follwing tạo ra lỗi này mặc dù c là một cấu trúc và có kế thừa công khai theo mặc định ??

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();
}

Câu trả lời:


168

Bạn cần:

class d : public c

classkế thừa là privatetheo mặc định.

Khi bạn kế thừa một cách riêng tư từ a classhoặc a struct, bạn nói rõ ràng rằng, trong số những thứ khác, việc chuyển đổi trực tiếp từ kiểu dẫn xuất sang kiểu cơ sở là không thể.


Ông Grigore một lần nữa cho chiến thắng. Xin cảm ơn, thưa ngài! Câu trả lời của bạn thực sự hữu ích!
M.Ionut
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.