vektoren mit strukturen kopieren
-
Also ich gebe einen Vektor per main funktion an den konstruktor einer klasse und möchte dort erreichen, das der vektor in der klasse , gleich dem übergebenen vektor ist.
Nur wie stell ich das an?
Habs so probiert:
struktur:struct xy_point { double x; double y; };main fkt
int main() { std::vector <xy_point> a_xy(5); //Array mit 5 Punkten (10 Punkte max!) //vordefiniertes Polygon a_xy[0].x=1.0; a_xy[0].y=4.0; a_xy[1].x=2.0; a_xy[1].y=1.0; a_xy[2].x=4.5; a_xy[2].y=1.0; a_xy[3].x=6.0; a_xy[3].y=3.0; a_xy[4].x=3.5; a_xy[4].y=5.0; cout<<a_xy.size() <<endl; //Anzahl der koordinaten POLYGON instanz(50,100,a_xy); return 0; }konstruktor
POLYGON(double a_x_pos,double a_y_pos,std::vector<xy_point> a_xy) { xy=a_xy; //Hier liegt der Fehler!!! //Wie sieht die Zuweisung richtig aus? }klasse:
class POLYGON { public: POLYGON(double a_x_pos,double a_y_pos,std::vector<xy_point> a_xy); //Prototyp Konstruktor POLYGON(); virtual ~POLYGON(); private: std::vector<xy_point> xy; double x_pos; double y_pos; double flaecheninhalt; };
-
Es wäre sehr hilfreich wenn du uns die genaue Fehlermeldung postest die du bekommst!
-
--------------------Konfiguration: 3Sem_Testat1 - Win32 Debug--------------------
Kompilierung läuft...
POLYGON.cpp
C:\Programme\Microsoft Visual Studio\MyProjects\3Sem_Testat3\POLYGON.cpp(37) : warning C4508: 'POLYGON' : Funktion sollte einen Wert zurueckgeben; Ergebnistyp 'void' angenommen
Linker-Vorgang läuft...
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall POLYGON::POLYGON(double,double,class std::vector<struct xy_point,class std::allocator<struct xy_point> >)" (??0POLYGON@@QAE@NNV?allocator@Uxy_point
@@@std@@@std@@@Z)
Debug/3Sem_Testat3.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.3Sem_Testat3.exe - 2 Fehler, 1 Warnung(en)
edit:
hab den fehler gefunden!
der konstruktor war kein konstruktor und konnte xy nicht kennen weilPOLYGON:: //vor POLYGON(double a_x_pos,double a_y_pos,std::vector<xy_point> a_xy)fehlte.
hm wohl beim kopieren verschütt gegangen ...
-
:arrow_right: POLYGON::POLYGON(double a_x_pos,double a_y_pos,std::vector<xy_point> a_xy) { xy=a_xy; //Hier liegt der Fehler!!! //Wie sieht die Zuweisung richtig aus? }Sonst weiss der Compiler nicht dass die Methode zur Klasse POLYGON gehört.
-
template<typename datatype=double> struct point { datatype x; datatype y; point(datatype const& x, datatype const& y) : x(x), y(y) {} point(point const& rhs) : x(rhs.x), y(rhs.y) {} }; class polygon : public shape { public: polygon(point const& pos, std::vector<point> const& xy) : m_pos(pos), m_xy(xy) {} polygon() : m_x(0.0), m_y(0.0) {}; virtual ~polygon() {}; private: std::vector<point> m_xy; point m_pos; };... damit da nicht unnötig Performance verschwendet wird, weil dein Vektor 2x kopiert wird ^^ So wird er nur einmal kopiert

Dann kannst du deine beiden Werte für die pos auch in einen Punkt packen ... durch den überladenen Konstruktor geht jetzt:int main() { std::vector<point> data; data.push_back(point(1.0, 4.0)); data.push_back(point(2.0, 1.0)); data.push_back(point(4.5, 1.0)); data.push_back(point(6.0, 3.0)); data.push_back(point(3.5, 5.0)); polygon shape_inst(point(50.0, 100.0), data); }...