Problem beim Initialisieren von Struktur

schuetzejanett

Erfahrenes Mitglied
Hallo,

ich bin C++ Anfänger, welcher vorher Java programmiert hat.
Nun zu meinem Problem, ich habe innerhalb der Klasse Cube eine Struktur Edge.
Diese Struktur besteht aus 2 Punkten (Klasse CPunkt3D)
Die Klasse Cube besitzt einen Vector der Structur Edge.

Nun erstelle ich im Konstruktur von Cube mehrere Punkte, welche ich einer Liste hinzufüge. Immer 2 bilden eine kante und diese beiden sollen in Edge gespeichert werden. So habe ich es bisher, aber beeim Kompelieren kommt es zu jeder mange Fehlern aus denen ich nicht so recht schlau werde. Was ist falsch daran und wie muss es richtig aussehen?

Ausschnitt Cube.h
Code:
class Cube
{
public:	
	Cube();
	virtual ~Cube(void);	

private:
	vector<Face> faceList;
	vector<Edge> edgeList; 
};

typedef struct Edge
{
	CPunkt3D startPoint;
	CPunkt3D endPoint;
};

Ausschnitt cube.cpp

Code:
#include "StdAfx.h"
#include "Cube.h"


Cube::Cube()
{
	vector<CPunkt3D> vPointList;	
	
	vPointList.push_back(CPunkt3D(0.0,0.0,0.0));
	vPointList.push_back(CPunkt3D(100.0,0.0,0.0));
	edgeList.push_back(Edge e{vPointList.at(0),vPointList.at(1)}); //hier kommen Fehler
.....
}
 
Hi.
Code:
typedef struct Edge
{
	CPunkt3D startPoint;
	CPunkt3D endPoint;
};
Ein typedef besteht immer aus 2 Teilen. Einem Typ für den ein neuer Alias angelegt wird, und der Name des Alias. Dein typedef hier ist sinnlos, denn du legst keinen Alias fest. Evlt. hattest du da was im Sinn was für C ganz nützlich ist, aber in C++ kannst du auf das typedef verzichten.
Code:
	edgeList.push_back(Edge e{vPointList.at(0),vPointList.at(1)}); //hier kommen Fehler
.....
}
Wie der Compiler sicherlich auch sagte, kannst du das nicht so machen. Die Initialisierung von Strukturen ist nur bei der Definition möglich:
C++:
Edge e = { vPointList.at(0),vPointList.at(1) };
edgeList.push_back(e);
Gruß

PS: Alternativ könntest du einen Konstruktor für eine Edge definieren der 2 CPunkt3D Objekte als Parameter erhält.
 
Zuletzt bearbeitet:
hallo,

danke für den Tipp mit dem Alias habe das typedef entfernt.

Wie füge ich denn der Struktur nen Konstruktor hinzu.
Habe nämlich ca. 50 solcher kanten und wollte das deswegen gerne in eine Zeile schreiben. Wollte allerdings dafür auch nicht extra ne Klasse anlegen.
 
Hallo,

das geht ganz genauso wie in einer Klasse, der wohl bekannteste (und einzige?) Unterschied zwischen einer Struktur und einer Klasse ist der definierte Sichtbarkeitsbereich innerhalb der Struktur ohne Schlüsselwort {public, private}.
Vererbung geht wohl auch nicht mit Strukturen usw. im Prinzip kannst du für Edge auch eine Klasse anlegen.

mfg ;-)
 
Hallo,

das geht ganz genauso wie in einer Klasse, der wohl bekannteste (und einzige?) Unterschied zwischen einer Struktur und einer Klasse ist der definierte Sichtbarkeitsbereich innerhalb der Struktur ohne Schlüsselwort {public, private}.
Vererbung geht wohl auch nicht mit Strukturen usw. im Prinzip kannst du für Edge auch eine Klasse anlegen.
Doch, Vererbung geht auch bei Strukturen - das findet man in der Standardbibliothek sogar recht häufig. Es gilt folgende Äquivalenz:
C++:
class X {
public:
   ...
};

==

struct X {
   ...
};
Es ist im Grunde nur abhängig von der persönlichen Vorliebe was man wählt und wieviel Schreibarbeit man sich machen möchte.

Gruß
 
Zurück