7

いくつかのコードを更新していますが、ヘッダーで作業しているときに、次の行に出くわしました。

.
.
.
class HereIsMyClass;
.
.
.

それでおしまい。別の長いクラス定義の前にあるのは、1 行だけです。HereIsMyClass は実はどこか別のクラスなのですが、なぜこの行がここに書かれているのかわかりません。それは何をするためのものか?

4

4 に答える 4

27

C++ のこの行は前方宣言です。将来のある時点で、HereIsMyClass という名前のクラスが存在する可能性が高いと述べています。クラスが完全に定義される前に、宣言でクラスを使用できます。

循環的に依存するクラスの分割とヘッダー ファイルの管理の両方に役立ちます。

例えば

class HereIsMyClass;

class Foo { 
  void Bar(HereIsMyClass* p1) ...
};

class HereIsMyClass {
  void Function(Foo f1);
}
于 2009-06-02T14:26:56.327 に答える
4

それは「前方宣言」と呼ばれます。これは、'HereIsMyClass' がクラスの名前であることをコンパイラに伝えます (変数、関数、またはその他の名前ではありません)。クラスを使用するには、後で定義する必要があります。

これは、相互に参照する必要があるクラスがある場合に便利です。

ここで、1 つの説明を示します。

于 2009-06-02T14:28:36.590 に答える
3

これは事前宣言と呼ばれるものです。HereIsMyClass の実際の宣言がファイルのさらに下にある場合、またはファイルのさらに下に含まれる別の #include にある場合、この行の後に HereIsMyClass を使用するクラス定義がある可能性があります。

その行がない場合、ファイルがコンパイルされない可能性があります。

于 2009-06-02T14:26:57.653 に答える