Problem mit Array
-
also folgendes problem ich brauche in einer Klasse ein 2-Dimensionales Array,
dessen größe noch nicht feststeht.
Genauer gesagt 2.private: GLfloat normalVertices[][3]; GLfloat vertices[][3];so. Jetzt will ich die größe des array vertices festlegen.
Vielmehr kommt die größe aus einer anderen Klasse in die mit folgender Funktion:void Objekt::setVertices(GLfloat fvertices[][3]){ vertices=fvertices; }Das funktioniert so aber irgendwie nicht.
das selbe problem ergibt sich auch wenn ich die größe von normalVertices festlegen will:
normalVertices=new GLfloat[numNormalVertices][3];das compilieren mit g++ sagt das da:
Objekt.cpp:45: error: incompatible types in assignment of ‘GLfloat (*)[3]’ to ‘GLfloat [0u][3]’ Objekt.cpp: In member function ‘void Objekt::calcNormalVertices()’: Objekt.cpp:50: error: incompatible types in assignment of ‘GLfloat (*)[3]’ to ‘GLfloat [0u][3]’ Objekt.cpp:53: error: incompatible types in assignment of ‘GLfloat*’ to ‘GLfloat [3]’Die zeilen sind die in denen das entscheidende passiert:
45 ist dievertices=fvertices;die zweite die
normalVertices=new GLfloat[numNormalVertices][3];kann mir wer helfen?
-
Vorsicht!!! evtl. anfängerblödsinn!!! 
int** zweidimensionalesArray; int numVertices=200; zweidimensionalesArray=new int* [numVertices]; for(int i=0; i<numVertices; i++){ zweidimensionalesArray[i]=new int[3]; }also, funktionieren tut es schon, aber vielleicht ist das der totale quatsch, mehrdimensionale arrays waren nie mein lieblingsthema
[ausserdem bin ich hier der jerk, der andauernd zeigt, wie man den code nicht gestalten sollte
]Hm... bist du dir sicher, dass du da überhaupt ein mehrdimensionales array brauchst? Dann kommen doch noch die texturkoordinaten dazu, und dann noch die faktoren für die einzelnen bones, und vielleicht willst du dann noch die ganzen vertices einzeln einfärben, und und und... Schreib doch gleich eine extra struktur für einen vertex, der diese ganzen informationen beinhaltet. dann brauchst du am ende nur einen array... (was, zugegeben, nicht in allen fällen das günstigste ist, zB kann man diese informationen nicht mehr trennen, was manchmal erwünscht ist
)nochma zum 2D-Array:
schon ma im voraus "sorry" falls es absoluter sch##dreck ist
(ooh man, wird das vielleicht ein gemetzel, aber wenn ich's verdient hab, solls mir recht sein
)
-
erstmal zum ursprünglichen code: du machst da zweierlei schlimme sachen, die zeigen das du das thema noch nicht wirklich verstanden hast (wobei es mich dann wundert, was du da mit vektoren machst, denn das ist irgendwie kein anfänger kram). ein array mit unbestimmter größe ist entweder einfach nur ein pointer dem du dann dynamisch speicher zuweist (siehe new/delete) oder eben das was du da versuchst, wobei auch bei dieser art der array definition bereits zur zeit des kompilierens die größe des arrays bekannt sein muss, was dann eben durch sofortige wertzuweisung geschieht:
char array[][3] = { {'c', 'a', 'b'}, {'f', 'z', 'i'} };hier ist also sofort bekannt das der array ein [2][3] array ist.
-
und auch wenn du es dann hinbekommen solltest, machst du da noch was falsch:
vertices=fvertices;was du da machst ist nichts anderes als den pointer "vertices" auf den speicher von "fvertices" zeigen zu lassen, was sichelich nicht deine intention war. wenn du diese art von operationen machen willst dann beschäftige dich mal mit den stl container klassen z.b. std::vector
-
also so null peilung hab ich nu wirklich nich.
Ich bin halt relativ neu bei c++. Hab mit java angefangen und da war so etwas standard. Bei c++ bereitet das allerdings probleme.
Das problem ist ja dass ich die größe nicht festlegen kann.
Ein Freund von structs bin ich nicht. vielleich versuch ichs mit ner extra Klasse für Vertices. Danke Ich versuch mich mal weiter.
-
Das problem ist, dass ich die größe nicht festlegen kann

Irgendjemand muss es ja tun... Entweder du erzeugst das modell in echtzeit, dann muss du halt irgendein algorithmus zur verfügung stellen, der bestimmt, wieviele eckpunkte das modell benötigt, oder du lädst das modell aus einer datei, und da muss immer dabei stehen, wieviele vertices einzulesen sind...
-
aber ich kann nicht im quelltext verankern, dass das array immer 12345 einträge braucht...
-
brauchst du bei "new" nicht. und mein beispielcode mag zwar nicht der schönste sein (würde auch gerne wissen: wie gehts denn schöner?
) , funktioniert jedoch mit new problemlos... muss halt "float**" statt "int**" als member-variable in deiner klasse aufnehmen, weil du ja flieskommazahlen brauchst, und initialisieren kannst du es im prinzip genauso, nachdem du die vertex-anzahl aus der datei geladen hast (wo deine daten jetzt letztendlich liegen [stack oder heap], kann dir ja egal sein, du solltest es letztendlich eh alles in einem vertex-buffer direkt im grafikkarten-RAM speichern)
also dann ma los...

-
Okay ich hab das Problem jetzt mit einer Klasse für Vektoren gelöst.
War soweit kein problem, hab allerdings ein anderes Arrayproblem,
vielleicht könnt ihr mir da ja helfen
http://www.c-plusplus.net/forum/viewtopic-var-p-is-1248249.html#1248249