0

次のシナリオがあります。2 つの基本クラスがあります: Base1、Base2、および 2 つの派生クラス: Derived、sysCommandExecutor は次のように派生します。

#include <iostream>
using namespace std;

class Base1 { virtual void dummy() {} };
class Base2 { virtual void dumy() {} };
class Derived: virtual public Base1, public Base2
{ int a; };

class sysCommandExecutor : public Base2
{
public:
int b;
Base1 *ptr;
void func(void);
};

void sysCommandExecutor::func(void)
{
  Derived *d;
  d = dynamic_cast<Derived *>(ptr);
  if (d == NULL)
  std::cout << "This is NULL" << std::endl;
  else
  {
  // Call a function of Derived class
  }
}

int main () {
   try {
   sysCommandExecutor * sys =  new sysCommandExecutor;
   sys->func();
   return 0;
   }
}                                         

func 内で "Derived" クラスのこの関数を呼び出したいのですが、dynamic_cast が失敗します。それは他の誰かのコードであるため、sysCommandExecutor クラスで関数を作成できません。sysCommandExecutor クラスの ptr ポインターを派生クラス オブジェクトを指すようにする方法は??

前もって感謝します

4

1 に答える 1

1

初期化されていないポインタを参照していますptr

メインを次のように変更した場合:

int main () {
   sysCommandExecutor * sys =  new sysCommandExecutor;
   sys->ptr=new Derived;
   sys->func();
   delete dynamic_cast<Derived *>(sys->ptr);
   delete sys;
   return 0;

} 

できます

あなたも仮想dtorがありません

于 2012-08-12T15:43:35.043 に答える