2

2つのクラスを含む2つのヘッダーファイルがあります。各クラスは、次のように他のクラスに依存しています。

// class1.h

#include "class2.h"

class ClassOne {
    ClassTwo* c2;
};

// class2.h

#include "class1.h"

class ClassTwo {
    ClassOne* c1;
};

コードがコンパイルされないことを期待していたので、ヘッダーの1つに前方宣言を追加しました。

// class1.h

#include "class2.h"

class ClassTwo;

class ClassOne {
    ClassTwo* c2;
};

しかし悲しいことに、それも機能していません。「未定義の型'ClassTwo'の使用」でコンパイラエラーが発生し続けます。

それらを1つのヘッダーファイルに結合するだけで機能することはわかっていますが、実際には両方とも非常に大きなクラスであり、組織化のために独自のヘッダーファイルを用意することをお勧めします。

これを回避する方法はありますか?

ありがとう、アレックス

4

1 に答える 1

4

前方宣言を追加しましたが、. を削除しませんでしたinclude。それを行うと、あなたは黄金です。

実際には、両方のインクルードを削除し、それらを前方宣言に置き換えます。

// class1.h

class ClassTwo;

class ClassOne {
    ClassTwo* c2;
};


// class2.h

class ClassOne;

class ClassTwo {
    ClassOne* c1;
};

循環依存が実際に必要とされるケースはほとんどないので、少なくとも設計を見直してください。

于 2012-08-09T21:34:47.123 に答える