2012-03-13 12 views
0

まず、これは宿題に基づく質問であることを明確にしたいと思います。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のを使用する必要がありますが、それはありません最後までバグ私を意志必須ではありません...

+0

一般ノート:QListのようなコンテナから継承するにはポイントがありませんが。再実装できる仮想メソッドはありません。 "継承上の合成"ルールに従い、QListをメンバーにしてください。 –

答えて

3

foreachは2番目の引数をオブジェクトへの参照にする必要があります。そのため、この間接参照する必要があります。

foreach(Registration *r, *this) { r->toString(); } 

あなたはまた、おそらくR-を書きたい>のtoString();あなたが作成したストリームに追加します。

+0

fontanini、ありがとう!私はそれを 'foreach(登録* r、* this){cout << r-> toString();}に変更しました。 } ' – georgelappies

+0

それは動作しましたか?私はforeachを使ったことは一度もありませんが、それは動作するように見えます。 – mfontanini

0

あなたがクラスを正しく実装していないと思います(明示的に指定しない限り)。 QListはRegistrationListクラスのスーパークラスではなく、クラスRegistrationListのメンバーであると考えられています。

それは次のようになりますforeachを使用して、言った:

foreach(Registration * r, RegList) { r->toString(); } //Where RegList is the QList member of RegistrationList 
+0

UML図が与えられた方法には、RegistrationListクラスからQList クラスに向かって指し示す空白の矢印の頭が付いた矢印があります。つまり、RegistrationListは親の権利ですか?しかし、今考えてみると、実際にはQListメンバーを持つ方がずっと理にかなっています。私はちょうどダブルチェックし、UML図にはメンバがなく、機能はありません。ヘルプと情報ありがとう:) – georgelappies

関連する問題