Array zurück geben
-
Hallo!
Ich möchte von einer Funktion ein Array erstellt haben.
Mein Ansatz:int max = 255; AbstractClass* result[max]; int result_cnt = search(result, max, "Suchkriterium"); int search(AbstractClass* result, int max_results, string krit) { int result_cnt = 0; // Durchsuche einen Datensatz for( int i = 0; i < max_ds; ++i ) { if( datensatz[i]->feld() == krit ) { result[result_cnt] = (AbstractClass*) datensatz[i]; } } return result_cnt; }Aber wenn ich das mache kommt so ein Fehler:
C2664: Konvertierung des Parameters 1 von 'AbstractClass *[255]' in 'AbstractClass *' nicht möglich
Was mache ich falsch?
Grüße, pktm
-
int max = 255; AbstractClass result[max]; //< Wozu der Pointer? int result_cnt = search(result, max, "Suchkriterium"); int search(AbstractClass* result, int max_results, string krit) { int result_cnt = 0; // Durchsuche einen Datensatz for( int i = 0; i < max_ds; ++i ) { if( datensatz[i]->feld() == krit ) { result[result_cnt] = (AbstractClass*) datensatz[i]; } } return result_cnt; }
-
Weil der Datentyp eine abstrakte Klasse ist. Von der kann man keine Instanzen verwenden.
Auf diese Weise kann ich mehrere verschiedene abgeleitete Klassen in einem Array speichern.Grüße, pktm
-
int max = 255; AbstractClass* result[max]; int result_cnt = search(result, max, "Suchkriterium"); int search(AbstractClass[max]* result, int max_results, string krit) { int result_cnt = 0; // Durchsuche einen Datensatz for( int i = 0; i < max_ds; ++i ) { if( datensatz[i]->feld() == krit ) { result[result_cnt] = (AbstractClass*) datensatz[i]; } } return result_cnt; }so dürfte es gehen. (Ich iggnoriere mal hier a) die Probleme wenn man arrays von polymorphn typen verwendet und die tatsache dass VLAs in C++ noch nicht existent sind)
-
Hallo!
Ja, Array auch in die Schnittstelle aufnehmen ist gut

// .h-Datei: int find(AbstractClass* result[], int max_result_count, string kriterium); // .cpp-Datei int CFolder::find(CAccount* result[], int max_result_count, string owner, CDate dateOfBirth) { int result_cnt = 0; int max_ds = 255; // Durchsuche einen Datensatz for( int i = 0; i < max_ds; ++i ) { if( result_cnt >= max_result_count ) break; if( datensatz[i]->feld() == krit ) { result[result_cnt] = (AbstractClass*) datensatz[i]; } } return result_cnt == 0; }Danke

Edit: so geht's nämlich.