この質問の正しいタイトルは、「インスタンスを互いに初期化できるクラスの循環依存性」である必要があります。他のインスタンスから初期化できるクラスによる循環依存性
ファイル「Index3i.h」:
Iは、別の及びその逆の「転換」であることを意味し(floatデータフィールドを持つ整数データフィールドとIndex3fとIndex3i)2つのクラスを有する
// #include "Index3f.h"
class Index3i {
public:
Index3i()
: r(0), g(0), b(0) { }
Index3i(const Index3i& copy)
: r(copy.r), g(copy.g), b(copy.b) { }
// Index3i(const Index3f& copy)
// : r((int)copy.r), g((int)copy.g), b((int)copy.b) { }
// Index3f toIndex3f() { ... }
...
};
ファイル「Index3f.h」:
// #include "Index3i.h"
class Index3f {
public:
Index3f()
: r(0.0f), g(0.0f), b(0.0f) { }
Index3f(const Index3f& copy)
: r(copy.r), g(copy.g), b(copy.b) { }
// Index3f(const Index3i& copy)
// : r((float)copy.r), g((float)copy.g), b((float)copy.b) { }
// Index3i toIndex3i() { ... }
...
};
私はIndex3i
クラスのオブジェクトから初期化してIndex3f
クラスのオブジェクトに変換できるようにする必要がありますし、他の方法で。また、は、これらのクラスのヘッダーのみをのままにしておきたいと思います。
コメントされたコンストラクタをコメント解除しようとすると、メソッドとそれには循環依存関係の問題が発生します。もう一つの可能な解決策は、いくつかの変換関数を実装し、 "IndexConvert.h"などの3番目のインクルードファイルに入れておくことです。
しかし、他の方法がありますか?ケースに適したソリューションを教えてください。
論理的な問題はここにあると思います。インデックスクラスの浮動小数点バージョンをダウングレードできるようにしようとしています。浮動小数点へのアップグレードをサポートする必要がありますが、intバージョンにダウングレードすることはできません。ダウングレードを強制したい場合は、追加機能を与える必要があります。 – mustafagonul