入れ子クラスとして複数の反復子を持つコンテナクラスがあります。入れ子クラスを含む
class Grid
{
protected:
class Iterator
{
Iterator(Grid* g) : grid(g){}
Grid* grid;
}
class MoreIterator : public Iterator
{
}
}
今、私はコンテナコードをクリーンアップするために、自分自身のヘッダファイルにイテレータを移動したい:構造がilkeが、このものです。
class Grid
{
protected:
#include "griditerators.h"
}
これまでのところこれはエラーなしでコンパイルされます。しかし:QtCreatorで
ライン
Iterator(Grid* g) : grid(g){}
Grid* grid;
は、「グリッドタイプの名前ではありません」私に言って、エラーとしてマークされています。
私はgriditerator.hファイル内の前方宣言とそれを解決すると考えていた:
class Grid;
class Iterator
{
Iterator(Grid* g) : grid(g){}
Grid* grid;
}
しかし、それは私のコンパイルエラーを与える:クラスグリッドは、それが宣言されているクラスと同じ名前を持ちます。
前方宣言を に置き換えて#include "grid.h" が動作します。しかし、どういうわけか、それは醜いと思う。
私は2つの作業オプションがあります。 1つは私のIDEで醜いエラーを示し、もう1つはあまり好きではありません。
私は他のバリエーションを試しました。そこではインクルードクラスは囲みクラスに含まれていませんが、それはさまざまな理由でコンパイルに失敗しました。
私の質問は次のとおりです。ネストされたクラスを処理するためのパターンが含まれていますか、囲みクラスファイル内に保持するには大きすぎますか?例えば
は次のように入れ子になったクラスを宣言するための方法があるでしょう:
class Grid::Iterator
Ok、単純な解決策:私は彼らが入れ子になっていることが気に入っていました。 1つのヘッダーファイルに基本クラス(Iterator)と3つの派生クラス(MoreIterator)を入れても構いませんか? –
もちろん、私は定期的に数多くのクラスを1つのヘッダファイルに入れています。 –