まず、これは宿題に基づく質問であることを明確にしたいと思います。QList派生クラスのforeachイテレータの2番目のパラメータとして 'this'を持つ
class RegistrationList : public QList<Registration *>
:
私は、このようなようQListに由来していると呼ばれるクラスRegistrationListを持っている)、ということでケースは、私は私の思考がゴチャゴチャしていない起こっているところだけ与えられた答えを持っている「理解」したいです
class GuestRegistration : public Registration
と
:登録オブジェクトは、リストRegistrationListは、元の登録クラスのオブジェクトへのポインタだけでなく、その2人の子供を持っているので、2つの子供のクラスを持っています何この関数が行う必要があることは、リスト内のすべてのオブジェクトで
QString toString();
という関数を呼び出している
void displayList();
:
class StudentRegistration : public Registration
クラスRegistrationListは、次のようにプロトタイプ化機能を持っている必要があります。
void RegistrationList::displayList()
{
QTextStream cout(stdout);
cout << "\nHere follows a list of all registrations:";
cout << "\n=========================================\n";
foreach(Registration *r, this) { r->toString(); }
}
しかし、コンパイラがすべてでそれを好きではない:
は今、これは私がRegistrationListクラスの
void displayList();
メンバ関数の実装のために持っているものです。私が見るのは、オブジェクトのようなオブジェクトのコレクションを含むリストを繰り返し処理したいということです。これらの各オブジェクトには、
toString();
というかなりの形式の情報を出力するメンバ関数があります。これは100%動作します。 foreach行をコメントアウトすると、コードは問題なくコンパイルされます。私が考えることができるのは、foreachが持っていないことです。
this
を2番目のパラメータとして使用しています。
それはそれはそれが必要かのように「ようだ」が、それが動作しない理由を私は見つけることができない場合、私はforeachのを使用する必要がありますが、それはありません最後までバグ私を意志必須ではありません...
一般ノート:QListのようなコンテナから継承するにはポイントがありませんが。再実装できる仮想メソッドはありません。 "継承上の合成"ルールに従い、QListをメンバーにしてください。 –