0

他のモジュールに存在し、リンクで使用できるクラスを使用したい。ヘッダー ファイルのサイズが大きいため、現在のモジュールにヘッダーを含めたくありません。

クラスを宣言しようとしています

クラス foo;
int foo::getValue();

ここで getValue() は、使用したい foo のメンバー関数です。

コードをコンパイルしているときに、リンクする前にコンパイルエラーが発生しました

error: forward declaration of 'struct foo'

ここで何が欠けていますか?

ありがとう、

4

2 に答える 2

5

クラス メンバーを前方宣言することはできません。ヘッダー全体を含める必要があります。

ここでの正しいアプローチは、ヘッダーのサイズを小さくすることです。クラス定義のみが含まれている場合は、そのままにしておきます。そうでない場合は、複数のヘッダーに分割される可能性があります。

クラス定義が巨大である場合、それは設計に問題があり、壊れる可能性があることを示しています。

于 2012-05-18T14:26:14.963 に答える
0

クラスの前方宣言は、クラスの内部構造、つまりメンバーやサイズについての知識が必要ない場合にのみ使用できます。

この手法の一般的な使用法には、クラスポインタまたは参照が含まれます。

class included_class;

class encapsulating_class
{
  public:
    void some_method(const& included_class_pointer) const;
  private:
    included_class * included_class_pointer;
};

指定した方法でクラス内部を前方宣言することは、この手法では不可能であり、クラスヘッダーを含める必要があります。

于 2012-05-18T16:55:28.357 に答える