türetilmiş * 'den tabana * dönüştürme var ancak erişilemez


88

Aşağıdaki kod, c bir yapı olmasına ve varsayılan olarak genel bir mirasa sahip olmasına rağmen neden bu hatayı üretiyor?

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

Yanıtlar:


168

İhtiyacınız olan:

class d : public c

classkalıtım privatevarsayılan olarak yapılır.

A classveya a'dan özel olarak miras aldığınızda struct, diğer şeylerin yanı sıra, türetilmiş bir türden temel türe doğrudan dönüşümün mümkün olmadığını açıkça söylüyorsunuz.


Bay Grigore bir kez daha galibiyet için. Teşekkür ederim, nazik efendim! Cevaplarınız gerçekten yardımcı oluyor!
M.Ionut
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.