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

17.03.2009, 20:02

probleme mit list der stl

hallo allerseits, ich habe ein problem

ich will gerade ein snake-klon programmieren und hab mir gedacht ich realisere die einzelen schlangenteile mithilfe einer verketteten liste (STL) von Punkten. ich habe mal testweise einen punkt darein gepackt, aber wenn ich per schleife die liste durchgehe und diesen auslese, ist der wert ellenlang und komisch

hier die wichtigen code passagen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
list<punkt> schlange;
list<punkt>::iterator i;

....

punkt dot(100,100);
schlange.push_back(dot);

....

for (i = schlange.begin();i!=schlange.end();++i);
   {
    cout<<(i->x)<<i->y;

....


jedenfalls sind die werte anders und ich verstehe nicht warum

achja: die klasse punkt beeinhaltet 2-int ( x und y)

danke im voraus

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

2

17.03.2009, 20:17

Zeig mal den Code für die Klasse punkt

mfg Philipp

3

17.03.2009, 20:22

Damit du Punkt Objekte in der Liste haben kannst, müssen die auf jedenfall kopiert werden können, also brauchst du einen Koppierkonstruktor und vielleicht noch einen operator= und sowas alles.
Lieber dumm fragen, als dumm bleiben!

4

17.03.2009, 20:35

code der klasse punkt

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class punkt
{
public:

int x,y;

punkt (int xneu, int yneu)
{

x = xneu;
y= yneu;

}


};


Jonathan, mit dem was du sagst kann ich nicht allzu viel anfangen, kannst du mir vllt ein beispiel geben wie man es machen muss

5

17.03.2009, 20:44

Bei solch einfachen Klassen sollte der Standard Copy-Konstruktor eigentlich ausreichen.
Ich verstehs nicht ganz, folgender Code funktioniert bei mir korrekt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <list>
using namespace std;

class punkt
{
public:
    int x,y;

    punkt (int xneu, int yneu)
    {
        x = xneu;
        y= yneu;
    }
};

list<punkt> points;
list<punkt>::iterator iter;

int main()
{
    punkt dot(100, 100);
    points.push_back(dot);
    for(iter = points.begin(); iter != points.end(); ++iter)
    {
        cout << iter->x << "," << iter->y << endl;
    }
    cin.get();
    return 0;
}

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

17.03.2009, 20:56

Zitat

C-/C++-Quelltext

1
cout<<(i->x)<<i->y; 


versuch mal zwischen den zwei zahlen n leerzeichen oder so auszugeben, ich denk mal dann sieht das gleich viel besser aus...

7

17.03.2009, 20:57

Ich versteh grad die Welt nicht mehr... Dein Programm, Alakazam funktioniert bei mir auch einwandfrei. Aber ich habe auch ein SEHR ähnliches Testprogramm geschrieben und bei mir kommt ein Debug Fehler wegen dem Iterator.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <list>

using namespace std;

class punkt
{
public:
    punkt (int x = 0, int y = 0) : posx(x), posy(y){}

    int posx, posy;
};

int main ()
{
    punkt dot (100, 100);

    list<punkt> schlange;
    list<punkt>::iterator i;

    schlange.push_back(dot);

    for (i = schlange.begin (); i != schlange.end (); ++i);
    {
        // Hier wird auch der Debug Fehler wegen dem Iterator ausgelöst

        cout << i->posx << i->posy;
    }

    cin.get();
    return 0;
}

8

17.03.2009, 21:01

Zitat von »"blabla"«


Jonathan, mit dem was du sagst kann ich nicht allzu viel anfangen, kannst du mir vllt ein beispiel geben wie man es machen muss

Damit das kopieren richtig funktioniert, musst du das Kopieren genau definieren.
http://informatik.unibas.ch/lehre/ss05/cs104/lectures/06_C++.pdf
http://de.wikipedia.org/wiki/Kopierkonstruktor

Sollte eigentlich alles erklären.
Lieber dumm fragen, als dumm bleiben!

9

17.03.2009, 21:02

C-/C++-Quelltext

1
cout << i->x << i->y; 

Die Elemente heißen bei dir posx und posy ;)

10

17.03.2009, 21:06

Ne das war nur ein Fehler beim Copy&Paste, sonst würde der Compiler ja einen Fehler ausgeben. Probiers doch mal aus. Bin sicher bei dir kommt auch ein Debug Fehler, was ich wirklich SEHR irritierend finde... ich editiers dir nochmal.

Werbeanzeige