PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ Struktur Zuweisung


Einfachkrank
2003-04-12, 19:00:08
Hi,

ich schon wieder mit einem kleinen C++ Problem... :)
Ich habe eine kleine Struktur mit wieder ein paar kleinen Unterstrukturen, ungefähr so:
typedef struct VERTEX_TYPE
{
float x, y, z;
}VERTEX,VEX;

typedef struct HEADBODY_TYPE
{
VEX Vertices[MAX_VERTEX];
int NumVertex;
// ...
}HEAD,BODY;

typedef struct MODEL_TYPE
{
HEAD Head;
BODY Body;
// ...
}MODEL,MESH;
Jetzt möchte ich die letzte Struktur einer anderen einfach zuweisen, wie hier:
MESH Mesh1, Mesh2;
// ...
Mesh2 = Mesh1;
Was muss ich denn jetzt am besten in die Strukturen ergänzen, damits problemlos geht? Hab bis jetzt so was, aber irgendwie hängt sich das Programm immer auf ???
const VERTEX_TYPE &operator=(const VERTEX_TYPE vex)
{ x = vex.x; y = vex.y; z = vex.z; return *this; }

MFG Einfachkrank

Demirug
2003-04-12, 19:28:56
Du must schon jeder struktur einen Zuweisungsoperator spendieren.

Wobei ich das Vertexarray mit einem Memcopy kopieren würde.

PS: Hälst du es für eine Gute Idee das Array mit den Verticen statisch auf eine feste grösse zu setzen? Speicherverschleiss ich hör dich trapsen.

Xmas
2003-04-12, 20:41:55
???
Da sich in den Strukturen keine Pointer befinden, brauchst du gar nichts hinzuzufügen. C++ erzeugt Default-Assignment-Operatoren für struct und class.

zeckensack
2003-04-13, 10:34:33
Originally posted by Xmas
???
Da sich in den Strukturen keine Pointer befinden, brauchst du gar nichts hinzuzufügen. C++ erzeugt Default-Assignment-Operatoren für struct und class. Gaynau.

zeckensack
2003-04-13, 10:35:30
Originally posted by Demirug
Wobei ich das Vertexarray mit einem Memcopy kopieren würde.Ich auch ;)

Vedek Bareil
2003-04-13, 23:45:30
wenn ich mir mal eine Frage erlauben darf, was ist der Sinn dieser Konstruktion hier:
typedef struct VERTEX_TYPE
{
float x, y, z;
}VERTEX,VEX; ?
Du hast so insgesamt 3 Typbezeichner für ein- und denselben Typ, nämlich VERTEX_TYPE, VERTEX und VEX.
Sinnvoller wäre so was hier:
struct VERTEX_TYPE
{
//...
};
oder so was:

struct VERTEX_TYPE
{
//...
} VERTEX, VEX;
Bei letzterer Konstruktion wären VERTEX und VEX keine Typbezeichner, sondern Variablen/Instanzen vom Typ VERTEX_TYPE.

Einfachkrank
2003-04-14, 15:18:29
@Vedek Bareil
Also ich mach das mittlerweile einfach aus Gewohnheit, da ich manchmal verschiedene Namen für denselben Datentyp eingebe...
Aber es hat auch andere "Vorteile": Man könnte genau diese Struktur theoretisch auch als Vektor nutzen, dann sind x,y und z eben keine Koordinaten sondern "Verschiebungswerte", wenn ich mich jetzt nicht falsch ausdrücke :)

Xmas
2003-04-14, 15:34:56
Originally posted by Einfachkrank
@Vedek Bareil
Also ich mach das mittlerweile einfach aus Gewohnheit, da ich manchmal verschiedene Namen für denselben Datentyp eingebe...
Aber es hat auch andere "Vorteile": Man könnte genau diese Struktur theoretisch auch als Vektor nutzen, dann sind x,y und z eben keine Koordinaten sondern "Verschiebungswerte", wenn ich mich jetzt nicht falsch ausdrücke :)
Ich denke du meinst den Unterschied zwischen Ortsvektor und Richtungsvektor ;)