0

我有三个类:Generic、CFG 和 Evaluator。

这是通用的:

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

这是CFG:

class CFG : public virtual Evaluator {

并且 Evaluator 没有子类化。

我提供了一个名为 PluginLCD 的 DLL,它有一个名为 Connect 的方法:

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

以下是我通过 scons 编译 DLL 的方式:

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

现在,我的代码中有两种情况。一个是在类LCDControl,哪个子类CFG。另一种情况是上面 whereGeneric子类EvaluatorCFG. Evaluator 有一个名为 LoadPlugins 的方法,正如其名称所暗示的那样,this通过 method 传递给 DLL Connect。好吧,在第一种情况下Generic *, Connect 中的演员应该返回NULL。但是,在第二种情况下,据我所知,应该返回一个有效的指针。它似乎不会以这种方式发生。我错了吗?

4

1 回答 1

2

众所周知,dynamic_cast 打破了许多编译器(包括 MSVC 和 gcc)的模块边界。我不知道为什么会这样,但是用谷歌搜索它会产生很多点击。我建议首先尝试摆脱 dynamic_cast 而不是试图找出它在第二种情况下返回 null 的原因。

于 2009-11-19T10:46:48.713 回答