Question

J'ai trois classes:. Générique, CFG et Evaluator

Voici générique:

class Generic: public virtual Evaluator, public CFG, public LCDInterface {

Voici CFG:

class CFG : public virtual Evaluator {

et sous Evaluator rien.

Je fournir une DLL nommée PluginLCD, et il a une méthode appelée Connect:

void PluginLCD::Connect(Evaluator *visitor) {
    visitor_ = dynamic_cast<Generic *>(visitor);
    if(!visitor_)
        return;
    type_ = visitor_->GetType();
}

Voilà comment je compiler la DLL par scons:

env.SharedLibrary(['PluginLCD.cpp', 'Evaluator.cpp', 'Generic.cpp', 'CFG.cpp'])

Maintenant, il y a deux scénarios dans mon code. L'un est en classe LCDControl, qui sous-classes CFG. L'autre scénario est au-dessus où Generic et sous-classes Evaluator CFG. Évaluateur a une méthode appelée loadplugins, qui fait ce que son nom l'indique, en passant par this à la DLL via la méthode Connect. Eh bien, dans le premier scénario, le casting à Generic * dans Connect devrait revenir NULL. Cependant, dans le second scénario, pour autant que je sache, un pointeur valide doit être retourné. Il ne semble pas être le cas de cette façon. Ai-je tort à ce sujet?

Était-ce utile?

La solution

dynamic_cast est connu pour briser à travers les frontières du module avec de nombreux compilateurs (y compris MSVC et gcc). Je ne sais pas exactement pourquoi c'est, mais googler il donne beaucoup de coups. Je recommande d'essayer de se débarrasser du dynamic_cast en premier lieu au lieu d'essayer de savoir pourquoi il renvoie null dans votre deuxième scénario.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top