2010-08-31 10 views
9

Ich möchte dies werfen:Guss const Klasse mit dynamic_cast

class Base 
{ 
public: 
    virtual ~Base(){}; 
}; 
class Der : public Base {}; 

int main() 
{ 
    const Base* base = new Der; 
    Der* der = dynamic_cast<Der*>(base); // Error 

    return 0; 
} 

Was soll ich tun? Ich habe versucht, zu setzen: const Der* der = dynamic_cast<Der*>(base);, um die Const zu halten, aber das funktioniert nicht.

Antwort

17

Try this:

const Der* der = dynamic_cast<const Der*>(base); 

dynamic_cast nicht die Fähigkeit, ein const Qualifier zu entfernen hat. Sie können const getrennt mit einem const_cast wegwerfen, aber es ist in den meisten Situationen eine schlechte Idee. Wenn Sie sich selbst mit dynamic_cast fangen, ist dies normalerweise ein Zeichen dafür, dass es einen besseren Weg gibt, das zu tun, was Sie zu tun versuchen. Es ist nicht immer falsch, aber denken Sie daran als ein Warnzeichen, dass Sie Dinge auf die harte Tour machen.

+0

Ich habe versucht, es funktioniert nicht. – okami

+0

Sie brauchen const zweimal - einmal im Typ der Variable, der zugewiesen wird, und einmal im 'dynamic_cast'. Im Beispiel von dem, was Sie versucht haben, hatten Sie nur das erste. – Eclipse

+0

ok. Aber nur eine Frage unter meiner Frage. Warum sollte ich virtuell halten ~ Base() {}; zu dynamic_cast gibt mir keinen Fehler? – okami

2
const Der* der1 = dynamic_cast<const Der*>(base); 

Der* der2 = dynamic_cast<Der*>(const_cast<Base*>(base)); 

Während die beiden obigen Gussstücke funktionieren, sollte der zweite vermieden werden.

+0

Bearbeitet, um Code-Tags hinzuzufügen. – Puppy