2011-04-28 3 views
1

Je suis en train de prédéfinir une classe dérivée comme suit,Prédéfinir classe dérivée

class Base{ 

} 

class Derived; 

class Unreleated{ 
    Base* ptr; 
public: 
    Unreleated& operator, (const Unreleated& m){ 
    static_cast<Derived*>(ptr); // pointer is a derived. 

    return *this; 
    } 


} 

class Derived : public Base{ 
//this is a container holding a bunch of unrelated. 
} 

mais je reçois transtypage invalide statique de base * à * dérivé?

Répondre

3

Déplacez la définition de Unreleated::operator, à après la définition de Derived.

class Base{ 

}; 

class Derived; 

class Unreleated{ 
    Base* ptr; 
public: 
    Unreleated& operator, (const Unreleated& m); 

}; 

class Derived : public Base{ 
//this is a container holding a bunch of unrelated. 
}; 

    Unreleated& Unreleated::operator, (const Unreleated& m){ 
    static_cast<Derived*>(ptr); // pointer is a derived. 

    return *this; 
    } 
3

Pour static_cast partir de base-> enfant ou enfant-> base, la relation doit être connue du compilateur au moment où la distribution est faite.

Puisqu'il n'est pas vraiment lié, définissez votre classe Unrelated après avoir défini à la fois la base et la dérivée pour établir correctement la relation d'héritage. Si Derived contient réellement un groupe de Unrelated en valeur, vous avez une dépendance circulaire insoluble. Vous devrez repenser votre conception pour lui permettre de fonctionner comme vous le souhaitez. Sans plus de détails, il est difficile d'aller plus loin.

Questions connexes