Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

1

14.05.2013, 17:20

[C++] Problem mit Vector

Ich wollte einen Vector erstellen um Zeiger auf Objekten darin zu speichern doch als ich das Programm ausgeführt habe ist etwas unerwartetes passiert. Der Fehler tritt beim Füllen des Vectors auf. Hat jemand eine Ahnung woran es liegen könnte und was mir dieser Fehler sagen möchte???

C-/C++-Quelltext

1
2
CSprite* Objekt = new CSprite(3, x, y, z, 1, 0.5, 0.0, 0.0, 1.0, 0.1, 0.0);
    ObjektVector.push_back (Objekt);
»Volker_Neff« hat folgendes Bild angehängt:
  • Screenshot.jpg

rnlf

Frischling

Beiträge: 85

Beruf: Softwareingenieur Raumfahrt

  • Private Nachricht senden

2

14.05.2013, 17:25

Sieht auf den ersten Blick so aus, als würde das Problem woanders verursacht. Leider stellst du nicht viele Informationen bereit. Der Code, mit dem du deinen Vektor erzeugst wäre interessant und irgendwo scheinst du über den Vektor zu iterieren und dabei den Fehler zu verursachen. Diese Stellen müsste man mal sehen um dir wirklich helfen zu können.

Tipp: Mach doch das, was Visual C++ dir vorschlägt, klicke auf Wiederholen und guck im Debugger, wo das Problem herkommt. Dann lernst du auch gleich noch was über Debugging.

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

3

14.05.2013, 17:42

Danke für deine Schnelle Antwort. Wenn ich auf weiter klicke öfnet sich ein weiteres Fenster und die stdthrow.cpp. Noch einmal auf weiter und das ganze beginnt von vorne.
Ich habe in einer Klasse einen Privaten Vector

C-/C++-Quelltext

1
2
std::vector <CSprite*> ObjektVector;
    std::vector<CSprite*>::iterator IteratorObjektVector;
und ich benutze den Vector in einer Memberfunktion

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ObjektVector.clear ();
    IteratorObjektVector = ObjektVector.begin ();
    float X [3] = {1.0f, 0.5f, 1.5f};
    std::vector <float> x;
    float Y [3] = {0.3f, 0.9f, 1.0f};
    std::vector <float> y;
    float Z [3] = {1.5f, 1.5f, 0.5f};
    std::vector <float> z;
    for (int i = 0; i < 3; i++)
    {
        x.push_back (X[i]);
        y.push_back (Y[i]);
        z.push_back (Z[i]);
    }

    
    CSprite* Objekt = new CSprite(3, x, y, z, 1, 0.5, 0.0, 0.0, 1.0, 0.1, 0.0); // Hier stürtzt er ab
    ObjektVector.push_back (Objekt);
...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

14.05.2013, 20:21

Du benutzt std::vector als mathematischen Vektor? Warum zum Geier?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

5

14.05.2013, 21:26

Als Mathematischenvetor ??? Ich wollte da nur Zeiger drin speicher num wieder auf die Objekte zugreifen zu können ?(

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

14.05.2013, 21:30

Du speicherst aber keine Zeiger darin, sondern jeweils 3 Floats.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

7

14.05.2013, 21:58

achso in den ne ich habe probleme mit dem danderem Vector. "std::vector <CSprite> Objektvector" die anderen übergeben nur die werte die laufen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

14.05.2013, 22:08

Du solltest das aber dringend überdenken. Es macht keinen Sinn erst Arrays zu erstellen und dann die Werte der Arrays in std::vector zu prügeln, um das dann zu übergeben. Das ist worst-case-Performance und zudem ziemlich unlogisch.

Zu Deinem eigentlichen Problem würde ich an Deiner Stelle wohl mal einen Breakpoint im Konstruktor setzen und dann schauen, was Du dort treibst, denn Du greifst scheinbar auf Indices zu, die es nicht gibt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

9

14.05.2013, 22:26

Jetzt einmal langsam ich bin noch nicht so erfahren. ich benutze vectoren als übergabe um nicht für jede art von Grafischem Objekt eine Funktion zu haben, und um die werte direckt eintragen zu können erstelle ich erst eine Arry.
Nun zum zweiten Punkt. @BlueCobold meinst du den Konstruktor vom Spreite ? dort kopire ich nur mit hilfe von std::copy die übergebenden Werte in Variablen der Klasse.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
Art = art;
    std::copy (x.begin (), x.end (), X.begin ());
    std::copy (y.begin (), y.end (), Y.begin ());
    std::copy (z.begin (), z.end (), Z.begin ());
    R = r;
    G = g;
    B = b;
    A = a;
    PrintX = Printx;
    PrintY = Printy;
    PrintZ = Printz;

könnte aber natürlich auch for schleifen benutzen...

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

10

14.05.2013, 23:18

Und was hat die Sache mit dem Breakpoint ergeben?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige