Das(hoffentlich) letzte array-problem
-
also wie man schon am titel sieht glaube ich mal wieder das arrays an meinen fehlern schuld sind -
folgendes:
ein Array von Objekten (mancher kennts vllt noch...):Dist ein Attribut einer Klasse.
das Array bekommt in einer Funktion eine Länge und werte
in der Funktion selbst können die korrekten werte ausgegeben werden.
Doch in eienr anderen Funktion der Klasse ist dies nicht möglich o0;hier der Code für alle dies Interessiert

void Objekt::calcNormalVertices(){ ObjektVektor tempObjVektor[numNormalVertices]; normalVertices=tempObjVektor; int j=0; for(int i=0;j<numNormalVertices;i+=3){ cout << vertices[i].getX() << vertices[i].getY() << vertices[i].getZ() << endl; GLfloat *normalVertex=kreuzProdukt(vertices[i].getGLfloatArray(),vertices[i+1].getGLfloatArray()); ObjektVektor objV(normalVertex[0],normalVertex[1],normalVertex[2]); tempObjVektor[j]=objV; gibAusNormalenvektor(i); j++; } normalVertices=tempObjVektor; int x=0; cout << x << ": " << normalVertices[x].getX(); cout << ", " << normalVertices[x].getY(); cout << "," << normalVertices[x].getZ() ; cout << endl;Hier /\ wird er korrekt ausgegeben mein Vektor
gibAusNormalenvektor(0);in dieser Funktion/\ nicht
und so sieht die funktion aus \/
void Objekt::gibAusNormalenvektor(int x){ cout << x << ": " << normalVertices[x].getX(); cout << ", " << normalVertices[x].getY(); cout << "," << normalVertices[x].getZ() ; cout << endl; }
-
gibmal bitte den text bund aus und bitte mit angeben zu dem typen z.b. normalVertics
-
text bund?
was ist das??also normalVertices ist ein Array von Objekten der Klasse ObjektVektor:
#include <GL/glut.h> class ObjektVektor{ private: GLfloat x; GLfloat y; GLfloat z; public: void setX(GLfloat _x); void setY(GLfloat _y); void setZ(GLfloat _z); GLfloat getX(); GLfloat getY(); GLfloat getZ(); ObjektVektor(GLfloat _x,GLfloat _y, GLfloat _z); ObjektVektor(); GLfloat* getGLfloatArray(); }; void ObjektVektor::setX(float _x){ x=_x; } void ObjektVektor::setY(float _y){ y=_y; } void ObjektVektor::setZ(float _z){ z=_z; } GLfloat ObjektVektor::getX(){ return x; } GLfloat ObjektVektor::getY(){ return y; } GLfloat ObjektVektor::getZ(){ return z; } ObjektVektor::ObjektVektor(GLfloat _x,GLfloat _y, GLfloat _z){ x=_x; y=_y; z=_z; } ObjektVektor::ObjektVektor(){ ; } GLfloat* ObjektVektor::getGLfloatArray(){ GLfloat returnA[3]; returnA[0]=x; returnA[1]=y; returnA[2]=z; return returnA; }GLfloat ist wie ein normales float behandelbar
vertices ist ebenfalls ein Array von ObjektVektor's
-
DaHunger schrieb:
GLfloat* ObjektVektor::getGLfloatArray(){ GLfloat returnA[3]; returnA[0]=x; returnA[1]=y; returnA[2]=z; return returnA; }Boom!
-
*hust*

was hab ich da falsch gemacht?
-
DaHunger schrieb:
was hab ich da falsch gemacht?
Du hast die Adresse einer lokalen Variablen zurückgegeben. Die Variable returnA gibt's nach dem Funktionsaufruf nicht mehr, der zurückgegebene Zeiger ist ungültig.
-
okee... und wie lös ich das problem? o0
-
Hallo
Den Speicher für das Array dynamisch reservieren und dach externem Gebrauch wieder löschen oder keinen Zeiger zurückgeben, so das das Array samt Werten kopiert wird.
bis bald
akari
-
habs folgendermaßen versucht:
immer dort wo ich das GLfloatArray brauche wird es lokal erzeugt.
Allerdings sind die werte immernoch falsch...
-
Du machst dir das Leben leichter wenn du die Daten intern auch in einem Array ablegst.
-
ok vielen dank ein weiteres Problem ist gelöst,
aber es ist dadurch ein weiteres entstanden XDes geht jetzt die koordinaten stimmen offenbar soweit,
sie scheinen zumindest nicht mehr so utopisch.Der fehler war das Array das ich in der funtion erzeugte, und später dem Attribut-Array zuwies. Denn auch hier waren die adressen nach ablaufen der Funktion nicht mehr gültig und deshalb stand in dem array blödsinn
ja über den nächsten fehler mussich erstmal ne weile nachdenken,
wenn ich nich weiterkomm hört ihr von mir ^^