mehrdim. dyn. array als Fkt-parameter
-
doppelzeiger schrieb:
double zeiger[3][3]

-
ok, ich weiche dann jetzt auf vector aus. gibt es da auch extended initializer lists oder geht das nur so wie ich oben angegeben hab, also jedes element einzeln zuweisen.
doppelzeiger schrieb:
double zeiger[3][3] = { 5,5,5, 5,5,5, 5,5,5, };ich kenne bei der Kompilierung die Dimension noch nicht. Deshalb hab ich das so nicht gemacht.
SeppJ schrieb:
Mach C++ in C++, kein C in C++:
was ist an meinem Code denn C und nicht C++?
SeppJ schrieb:
Weiterhin sind ganz allgemein 2D-Arrays keine Doppelzeiger, wie du es in Zeile 10 versuchst, daher klappt das auch nicht.
solange ich das array nicht als Funktionsparameter übergebe, funktioniert das in meinem eigentlichen Programm wunderbar.
-
badstyleprogrammerr schrieb:
ich kenne bei der Kompilierung die Dimension noch nicht.
Sicher?
-
da sich die Dimension aus den Daten ergibt, und die Daten während der Laufzeit des Programms gelesen/geändert werden, bin ich mir fast sicher, dass ich mir sicher bin.

-
Aber das 3 ist doch fix?
std::vector<std::array<int,3> >
-
das ist ja nicht der richtige Code, den ich da geposted hab. ich pflanze hier doch keine 800 Zeilen Code ins Forum. Es ging nur darum, dass der Beispielcode den gleichen Compiler error ausspuckt wie mein eigentliches Problem.
-
badstyleprogrammerr schrieb:
was ist an meinem Code denn C und nicht C++?
Die genannten drei Punkte.
solange ich das array nicht als Funktionsparameter übergebe, funktioniert das in meinem eigentlichen Programm wunderbar.
Und meinst du nicht, dass dies ein Hinweis sein könnte, dass da etwas nicht stimmt?
-
Die Frage macht aber nur Sinn, wenn mindestens eine Dimension konstant ist. Bei
int[3][3]sind beide konstant, beistd::vector<std::array<int,3> >nur eine.
-
SeppJ schrieb:
new -> vector
Arrayübergabe -> Iteratoren
low-level Gefrickel -> Abstraktionseit wann ist new den nicht C++?
im Prinzip wird beim Funktionsaufruf nicht das array, sondern nur der Zeiger auf das array übergeben, und Zeiger sind meines Wissens nach auch Iteratoren, also verstehe ich die Bemerkung nicht.
mit der dritten Bemerkung kann ich sowiso nichts anfangen.
-
doppelzeiger schrieb:
Die Frage macht aber nur Sinn, wenn mindestens eine Dimension konstant ist. Bei
int[3][3]sind beide konstant, beistd::vector<std::array<int,3> >nur eine.nur "a" soll als variabel angesehen werden.
-
badstyleprogrammerr schrieb:
SeppJ schrieb:
new -> vector
Arrayübergabe -> Iteratoren
low-level Gefrickel -> Abstraktionseit wann ist new den nicht C++?
im Prinzip wird beim Funktionsaufruf nicht das array, sondern nur der Zeiger auf das array übergeben, und Zeiger sind meines Wissens nach auch Iteratoren, also verstehe ich die Bemerkung nicht.
mit der dritten Bemerkung kann ich sowiso nichts anfangen.
Alle drei deiner Erwiderungen bestätigen bloß, dass ich absolut Recht hatte. Leider bist du, anstatt daraus zu lernen, irgendwie in einen komischen Beißreflex übergegangen. Nun, dann werde ich wohl lieber nicht weiter füttern.
-
badstyleprogrammerr schrieb:
seit wann ist new den nicht C++?
Syntaktisch schon. Es geht hier jedoch um guten Stil, Exceptionsicherheit und RAII.
newist da ein klassisches Beispiel.im Prinzip wird beim Funktionsaufruf nicht das array, sondern nur der Zeiger auf das array übergeben, und Zeiger sind meines Wissens nach auch Iteratoren, also verstehe ich die Bemerkung nicht.
Ja, aber sie sind als Iteratoren für einen allgemeinen Algorithmus (sehr) unflexibel und damit unpassend. Mit Iteratoren meint SeppJ, dass die Funktion* ein Iteratorenpaar auf Start und End einer Menge nimmt, wobei der Iteratoren-Typ ein Templateparameter ist.
~*Die ja eigentlich, wie im darauf folgenden Text impliziert wird, keine Funktion ist, sondern ein Funktionstemplate~
-
@ SeppJ
Ich wollte hier nicht verbohrt rüberkommen (schließlich habe ich ja die Frage gestellt und somit zugegeben, dass ich nicht der Experte bin), sondern lediglich diskutieren, denn einige deiner knappen und unverständlichen Kommentare haben mich nicht weitergebracht.@ Sone
Danke, das habe ich jetzt verstanden.ps: ich hab jetzt vector anstatt new benutzt und es geht. Vielen Dank