การแปลงจาก * มาเป็นฐาน * มีอยู่ แต่ไม่สามารถเข้าถึงได้


88

เหตุใดโค้ด follwing จึงสร้างข้อผิดพลาดนี้แม้ว่า 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();
}

คำตอบ:


169

คุณต้องการ:

class d : public c

classการสืบทอดเป็นprivateค่าเริ่มต้น

เมื่อคุณได้รับมรดกจาก a classหรือ a แบบstructส่วนตัวคุณจะพูดอย่างชัดเจนเหนือสิ่งอื่นใดการแปลงโดยตรงจากประเภทที่ได้รับมาเป็นประเภทพื้นฐานนั้นไม่สามารถทำได้


Mr Grigore อีกครั้งสำหรับการชนะ ขอบคุณครับท่านผู้ใจดี! คำตอบของคุณช่วยได้จริงๆ!
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.