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

1

23.12.2010, 11:07

STL Problem mit 2 Listen des gleichen Typs

Hi,

tut mir leid, dass ich alle 3,4 Tage ein neues Problem habe, aber ich bekommst einfach nicht hin^^

Also, folgendes funktioniert:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct Struktur
{ 
    //... bla 
}; 

std::list <Struktur> StrListe; 
std::list <Struktur>::iterator iStr; 

iStr = StrListe.begin(); 

while (iStr != StrListe.end ())
{
   // bla
++iStr; 
}



aber folgendes nicht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
std::list <Struktur> StrListe; 
std::list <Struktur> StrListe2; 
std::list <Struktur>::iterator iStr; 

iStr = StrListe.begin(); 

while (iStr != StrListe.end ())
{
   // bla
    ++iStr; 
}

iStr = StrListe2.begin ();  //<- geht noch wunderbar, werte stimmen

while (iStr != StrListe2.end ()) //<- FEHLER
{
    //bla 
    ++iStr; 
}



Lässt sich alles kompilieren, aber sobal die 2. while schleife oben erreicht wird bekomme ich folgenden Fehler:

Zitat


Debug Assertion Failed
Programm: bla
File: ...vc2010/include/xtree
Line 236
Expression: map/set iterator not dereferencable
...


Ich frage mich gerade, was ich da dereferenzieren soll, ich dachte ich hätte den iterator bereits auf den beginn der 2. liste gesetzt?
Kann mir da jemand helfen? Die erste Liste läuft übrigens ohne zu murren durch. Wenn ich die erste Liste weglasse, gibt es ebenfalls keinen Fehler, es liegt also nicht an der 2. Liste selbst o.ä.
Was auch nicht funktioniert, ist einen 2. iterator zu erstellen, der dann die 2. liste durchläut.

lg chaia

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Chaia*« (23.12.2010, 11:13)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

23.12.2010, 11:23

ist das der komplette originalcode?
ich glaub du hast nen einfachen tippfehler im originalcode. wär hilfreich wenn du ihn postest.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

3

23.12.2010, 11:50

Danke für den Hinweis, habe eben nochmal alles schritt für schritt geprüft und gemerkt, dass es ein Bug in der cpGUI (sfml-GUI) ist.
Habe bis jetzt nach 2 Tagen 3 nicht ganz unerhebliche Bugs gefunden :D
Werde sie bei Zeiten mal melden.

Ich dachte der Fehler würde etwas mit meinen Listen zu tun haben, da ich in der Schleife etwas mit der GUI mache und diese intern mit vectoren arbeitet.
Aufgrund der Fehlermeldung dachte ich an meine Listen.

lg chaia

PS: Frohe Weihnachten :)

4

23.12.2010, 13:56

Zitat

habe eben nochmal alles schritt für schritt geprüft und gemerkt, dass es ein Bug in der cpGUI (sfml-GUI) ist.
Habe bis jetzt nach 2 Tagen 3 nicht ganz unerhebliche Bugs gefunden :D

Bist du dir Sicher, dass du sie nicht einfach falsch benutzt ;)?

5

23.12.2010, 14:48

Bei den dingen, die ich gefunden habe bin ich mir ziemlich sicher ja:

- wenn man einen button mit new, also auf dem heap anlegt, funktionieren einige Funktionen nicht, wie z.b. die funktion SetMouseOverColor (zumindest zeigt sie keine wirkung) oder die CheckState Methode, wenn man MouseButton Released abfragen will (MouseButton Down klappt aber). Wenn ich sie auf dem stack anlege (sonst alles 100% gleich) funktioniert es wunderbar.


- dann gibt es noch diesen Bug:

wenn ich z.B. ein Feld zur Texteingabe erstelle und die Funktion, die es erstellt mehrfach aufgerufen wird (also z.B. wenn man jetzt ein Untermenü öffnen würde, dann wieder schließt und wieder öffnet) gibt es ab. dem 2. aufruf einen lesefehler. Der 1. Aufruf funktioniert wunderbar. Das ganze passiert aber nur, wenn man für das textfeld einen GUIContainer benutzt der zum Textfeld relativ global ist, also erst nach dem textfeld zerstört werden würde. (z.B. wenn man den container als class member hat, aber das textfeld erst später in der funktion erstellt, die das menü aufruft). Wenn ich einen Container im selben Gültigkeitsbereich zusammen mit dem Textfeld erstelle klappt alles.

- dann noch den von oben:

Diesen Bug kann ich nicht genau erklären.
Jedenfalls scheint es manchmal so, als könnte ein GUI Kontainer überlaufen oder so.
Könnte vllt. auch so was ähnliches wie bei Bug 2 sein, denn auch dieser Bug tritt nur auf, wenn der Container einen größeren Gültigkeitsbereich hat.


So, also bei den ersten beiden bin ich mir 99% sicher, dass ich nichts falsch mache. Hast du die cpGUI schon mal verwendet? Die ist so einfach zu verwenden, da kann man eigentlich wenig falsch machen. Beim Letzten bin ich mir wie gesagt nicht so wirklich sicher, wie ich das jetzt beschreiben soll, da ich ihn schlecht reproduzieren kann.

lg chaia

6

23.12.2010, 19:29

lad mal dein Projekt hoch. Sieht eher so aus als würdest du ein wenig mist aufm Heap fabrizieren ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

7

26.12.2010, 23:25

So, ich war die letzten Tage nicht da und dann hab ich es mir heute nochmal genau angeschaut.
Ich muss zugeben, es ist kein ein Bug, sondern es mangelt mir an Kenntnissen das Problem richtig zu lösen.
Das Problem ist, dass man ja noch keine Werte in der Klassendefinition zuweisen darf, was ich aber auf jeden Fall muss, denn die Buttons haben einen Konstruktor, der eben ein paar Werte verlangt^^
Das Problem ist: Wie kann ich jetzt den Konstruktor eines Members in der Klasse aufrufen?

Ich muss zugeben ich war etwas übereifrig mit dem Bugsuchen^^

lg chaia

8

27.12.2010, 04:06

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
class bar;

class foo
{
    bar val1;

    foo() : val1(Parameter)
    {
    }
};


That what you want?

9

27.12.2010, 09:53

Ah super, danke :)

Werbeanzeige