从派生*到基础*的转换存在,但无法访问

问题描述 投票:0回答:1

为什么以下代码会产生此错误,即使

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();
}
c++ inheritance
1个回答
189
投票

您需要:

class d : public c

class
默认继承是
private

当您从

class
struct
私有继承时,除其他外,您明确表示从派生类型直接转换为基类型是不可能的。

© www.soinside.com 2019 - 2024. All rights reserved.