konstruktor mit array-parameter



  • hallo,

    ich kriege es irgendwie nicht gebacken einem konstruktor ein array zu übergeben, damit er sein eigenes (interness) dadurch ersetzt. das ganze sollte so aussehen:

    konstruktor(type *array[]) {
    
      internesarray = array;
    
    }
    

    das dumme ist.. mein compiler verweigert mir das.. klar.. da ist ein fehler drin 🙂 (ich seh ihn nicht) aber wie mach ich das richtig? kann er nicht einfach widerstandslos den zeiger auf das (bereits bestehende) array setzen?

    gruss

    eviluser



  • wie sieht denn dein internes Array aus?

    Wahrscheinlich musst du das Array mit memcpy kopieren.

    Oder soll die Klasse nur einen Zeiger auf ein Array haben?



  • die beiden arrays sind vom selbem typ und haben die selbe länge. die klasse soll später auf dem array arbeiten können als hätte sie es selber erzeugt. aber es sollte keine kopie erzeugt werden.



  • Hallo,

    so sollte es funktionieren:

    Example::Example(array_type* array, size_t arraySize)
        : internesArray(array), internArraySize(arraySize)
    {}
    

    Ich habe hier die Groesse mal mit angegeben, musst du natuerlich nicht. Koennte
    aber wichtig sein, falls du das Array mal durchlaufen musst.

    mfg
    v R



  • eviluser schrieb:

    hallo,

    ich kriege es irgendwie nicht gebacken einem konstruktor ein array zu übergeben, damit er sein eigenes (interness) dadurch ersetzt. das ganze sollte so aussehen:

    konstruktor(type *array[]) {
    
      internesarray = array;
    
    }
    

    das dumme ist.. mein compiler verweigert mir das.. klar.. da ist ein fehler drin 🙂 (ich seh ihn nicht) aber wie mach ich das richtig? kann er nicht einfach widerstandslos den zeiger auf das (bereits bestehende) array setzen?

    gruss

    eviluser

    Warum benutzt du keine std::vector?

    konstruktor(std::vector<type> & array) : internesarray(array) {}
    

    Es hat doch heutzutage kaum einen Sinn Arrays zu benutzen.



  • hallo,

    hehe 🙂 danke.. die fehlermeldungen haben sich auf eine zeile reduziert 🙂
    die kann ich nun posten ohne dass mir jemand den kopf abreisst 🙂

    incompatible types in assignment of `float *' to `float[4]'

    unter welchem namen läuft eigentlich die operation die du mir geschickt hast?

    Example::Example(array_type* array, size_t arraySize)
        : internesArray(array), internArraySize(arraySize)
    {}
    

    (dann kann ich sie mal nachschlagen 🙂 )

    gruss

    eviluser



  • Du hast ein statisches Array, das ist natuerlich bloed. Wenn du es dynamisch
    erstellst, dann funktioniert es, ansonsten musst du im CTor-Parameter die Groesse
    mit angeben die das Array hat:

    Example::Example(array_type array[size])
        : internal_array(array)
    {}
    

    Wenn du es dynamisch erstellt hast, dann funktioniert es so, wie ich es in meinem
    ersten Beispiel gezeigt habe. Ansonsten solltest du dir auch mal, wie Ponto schon
    angedeutet hat, mal die Klasse std::vector anschauen. Mit dieser hast du oben
    genannte Probleme nicht.

    unter welchem namen läuft eigentlich die operation die du mir geschickt hast?

    Was meinst du damit? Welche Operation?

    mfg
    v R



  • gibt trotzdem den selben fehler ..

    ich meinte.. was für ein wort müsste ich nachschlagen um diese konstruktion:

    bla::bla():blub(blablub) {}

    vorzufinden .. 🙂

    in meinem stroustoup (oda wie der heisst) wimmelt es von unleserlichen konstrukten, die alle irgendwo sinnvoll sind.. 🙂 nur wo

    gruss

    eviluser



  • eviluser schrieb:

    gibt trotzdem den selben fehler ..

    Merkwuerdig, poste doch mal den Code des CTors + der Instanziierung der Klasse.

    ich meinte.. was für ein wort müsste ich nachschlagen um diese konstruktion:

    bla::bla():blub(blablub) {}

    vorzufinden .. 🙂

    in meinem stroustoup (oda wie der heisst) wimmelt es von unleserlichen konstrukten, die alle irgendwo sinnvoll sind.. 🙂 nur wo

    gruss

    eviluser

    Nach dem : beginnt die sogenannte Initialisierungsliste. Hier kannst du Member-
    variablen mit Werten initialisieren oder eben mit Parametern, so wie es oben
    in den Beispielen zu sehen ist. Die Initialisierungsliste wird vor dem CTor-
    Body ausgefuehrt.

    mfg
    v R



  • eigentlich garnicht so viel .. oder?

    private:
    
      float v[4];
    
      inline vector3(float newv[4]):v(newv) {}
    
     public:
      bla..
    

    gruss

    eviluser



  • Ist vector3 der CTor? Eine Initialisierungsliste kann man nur beim CTor benutzen,
    nicht aber bei normalen Membervariablen.

    mfg
    v R


Anmelden zum Antworten