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.


Anmelden zum Antworten