0

次のようにクラスを前方宣言できることを知っています。

class Foo;

// ... now I can use Foo*

ただし、次のようなことはできますか。

class Bar {
  public:
    virtual void someFunc();
};
// ... somehow forward declare Class Foo as : public Bar here
someFunc(Foo* foo) {
  foo -> someFunc();
}

class Foo: public Bar {
}

?

ありがとう!

4

2 に答える 2

4

Bar を前方宣言しclass Bar;、署名を変更してas パラメータsomeFuncを取ることができます。基本クラスの仮想メソッドであるため、動作するはずですBar*someFunc()

于 2010-01-28T04:38:00.707 に答える
1

前方宣言Foo不完全な型になり、の定義を提供するまで不完全なままになりますFoo。はFoo不完全ですが、ポインターを逆参照しようとする試みは形式が正しくありませんFoo。だから書くために

foo->someFunc();

Fooの定義を提供する必要があります。

于 2010-02-02T10:29:31.230 に答える