6

私は次のクラスを持っています:

class A {
protected:
     A *inner;
public:
    ....
    virtual void doSomething() = 0;
    ....
}

class B: public A {
   ...
   void doSomething() {
       if(inner != NULL)
           inner->doSomething();
   }
   ...
}

使用するinner->doSomething()と、セグメンテーション違反が発生します。inner->doSomething()Bクラスに呼び込むにはどうしたらいいですか?

前もって感謝します。

4

2 に答える 2

9

メンバー内部の明示的な初期化がないと、メンバーがNULLではなく、無効なメモリを指している可能性があります。内部を明示的に初期化するコードを見せていただけますか?

Aの適切なコンストラクターは次のようになります

protected:
A() : inner(NULL) {
  ...
}
于 2009-09-30T15:17:43.573 に答える
4

ただし、A* を B がこのポインターを初期化したものと同じになるように割り当てると、スタック オーバーフローが発生します...インナーが必要な理由は何ですか? A::DoSomething() を呼び出すことはできませんか?

于 2009-09-30T15:22:54.870 に答える