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 abreisstincompatible 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