Atlanx
Mitglied
(Statische, globale) Objekte in Liste kopieren.
-------------------------------------------------------------------
IDE: Borland C++ Builder 6
Ich hatte heute ein Problem damit ein Objekt (global) in einer STL-Liste abzulegen.
Inzwischen habe ich zwar eine Lösung gefunden, mit der es funktioniert, aber ich verstehe immer noch nicht, wieso mein erster Ansatz nicht funktioniert hat.
Vielleicht kann mir hier jemand sagen, worin mein Fehler liegt bzw was genau die Zeile
PolygonList.push_back(MyPolygon) macht, denn eigentlich es würde dadurch das Objekt in der Liste gespeichert und z.B. NICHT nur ein Zeiger.
Dies sind die entsprechenden Zeilen aus dem Quellcode:
Es geht nicht so:
und auch nicht so:
Sondern so:
Fragen:
1) warum geht der erste und zweite Ansatz nicht.
2) Was genau tut PolygonList.push_back(MyPolygon2);
----------------------------------------------------------------------------------------------------------------------
Es folgt nochmal der funktionierende Quellcode, aber ausführlicher,
falls das da oben zu wenig sein sollte:
----------------------------------------------------------------------------------------------------------------------
Vielen Dank.
-------------------------------------------------------------------
IDE: Borland C++ Builder 6
Ich hatte heute ein Problem damit ein Objekt (global) in einer STL-Liste abzulegen.
Inzwischen habe ich zwar eine Lösung gefunden, mit der es funktioniert, aber ich verstehe immer noch nicht, wieso mein erster Ansatz nicht funktioniert hat.
Vielleicht kann mir hier jemand sagen, worin mein Fehler liegt bzw was genau die Zeile
PolygonList.push_back(MyPolygon) macht, denn eigentlich es würde dadurch das Objekt in der Liste gespeichert und z.B. NICHT nur ein Zeiger.
Dies sind die entsprechenden Zeilen aus dem Quellcode:
Code:
// globale Variablen anlegen
list <TypePoly> PolygonList; // STL-Liste
TypePoly MyPolygon; //(global = Statisches Objekt)
Code:
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
Es geht nicht so:
Code:
PolygonList.push_back(MyPolygon); // Polygon der Liste hinzufuegen
Code:
if (a=b)
{
TypePoly MyPolygon2;
MyPolygon2 = MyPolygon;
PolygonList.push_back(MyPolygon2); // Polygon der Liste hinzufuegen
}
Code:
TypePoly MyPolygon2;
if (a=b)
{
MyPolygon2 = MyPolygon;
PolygonList.push_back(MyPolygon2); // Polygon der Liste hinzufuegen
}
Code:
}
Fragen:
1) warum geht der erste und zweite Ansatz nicht.
2) Was genau tut PolygonList.push_back(MyPolygon2);
----------------------------------------------------------------------------------------------------------------------
Es folgt nochmal der funktionierende Quellcode, aber ausführlicher,
falls das da oben zu wenig sein sollte:
----------------------------------------------------------------------------------------------------------------------
Code:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "IGL.h"
#include <list> // I want to use the STL list container class
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner) { }
// Strukturen
struct IntersectionPoint // Schnittpunkt
{
int EdgeNr;
double Lambda;
TypePoint Intersection;
};
// Listen
list <IntersectionPoint> IntersectionList;
list <TypePoly> PolygonList;
// Polygon anlegen
TypePoly MyPolygon;
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
PolygonList.clear();
InitGraphics();
}
// Durchlaeuft alle Punkte des Polygons
void CreateAndFillSubPolygons(TypePointPair Line)
{
// Step 1: Create the IntersectionList of Line with MyPolygon.
IntersectionList.clear();
// Get MyPolygon from PolygonList and delete it from PolygonList
TypePoly TempPoly = PolygonList.back();
MyPolygon = TempPoly;
PolygonList.pop_back();
.....
}
////////////////////////////////////////////////////////////////////////////////
// MouseUp //////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
bool MakePoly = true;
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
TypePoly MyPolygon_tmp;
TypePoint P = HCToTypePoint(X,Y); // angeklickten Punkt ermitteln
if (MakePoly) //-Any mousekey
// The user is creating the 1. polygon:
{
MyPolygon.AppendVertex(P);
MyPolygon.DrawAsPolyline();
}
else // The user is creating the line to cut the polygon:
{ ...
CreateAndFillSubPolygons(Line);
....}
if (Button == mbRight) //-Right mousekey
{
MakePoly = false;
MyPolygon.DrawAsPolygon();
MyPolygon_tmp = MyPolygon;
PolygonList.push_back(MyPolygon_tmp);
}
}
//---------------------------------------------------------------------------
//End
Vielen Dank.