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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

17.03.2009, 21:10

verwirrt ihn jetzt nicht mit dem ganzen copy konstruktor zeug, das braucht er net, der vom compiler automatisch erzeugte funktioniert hier wunderbar...

12

17.03.2009, 21:11

also der code von alakazam funktioniert bei mir auch problemlos :?

ich habe aus meinen code jetzt alles nicht wichtige auskommentiert (er war noch voll mit SDL-Funktionen, sodass er jetzt so aus sieht.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <list>



using namespace std;

class punkt
{
public:

int x,y;

punkt (int xneu, int yneu)
{

x = xneu;
y= yneu;

}


};

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






int main ( int argc, char** argv )
{

    /* SDL_Init( SDL_INIT_VIDEO );


    atexit(SDL_Quit);


    screen = SDL_SetVideoMode(800, 600, 16,
                                           SDL_HWSURFACE|SDL_DOUBLEBUF);*/

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

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


 

    return 0;
}


die beiden codes sind doch im prinzip identisch oder?

jedenfalls gibt der mir wieder komische zahlen 7-stelligen bereich aus. was mir aufgefallen ist,
nach dem auskommentieren von folgendem teil:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
 /* SDL_Init( SDL_INIT_VIDEO );


    atexit(SDL_Quit);


    screen = SDL_SetVideoMode(800, 600, 16,
                                           SDL_HWSURFACE|SDL_DOUBLEBUF);*/
gibt der mir für die y-Variable 0 aus und keine seltsame Zahl mehr.

naja, ich bin mit meinem latein am ende

13

17.03.2009, 21:56

@blabla:

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
32
33
#include <iostream>
#include <list>
using namespace std;

class punkt
{
public:

    int x,y;

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

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);
    {
        cout<< i->x;
    }

    return 0;
}

Folgendes funktioniert aber nicht:

C-/C++-Quelltext

1
2
3
    list<punkt> schlange;
    list<punkt>::iterator i;
    punkt dot(100,100);

Sollte man mal debuggen um den Fehler zu finden, ich versteh's grad nicht.

@-insane-: Habe exakt deinen Code kompiliert -> funktioniert(Code::Blocks mit GCC unter Ubuntu)

14

17.03.2009, 22:01

Okay, ich verwende VS 08. Dort läuft es jedenfalls nicht im Gegensatz zu deinem Code. Ist trotzdem merkwürdig.

@ blabla: Falls es mit Alakazam's Hilfe nicht läuft: Welchen Compiler benutzt du? Und probier mal bitte beide Codes, von Alakazam und mir zu compilieren und berichte von deinen Ergebnissen.

15

17.03.2009, 22:39

hmm, also ich verwende codeblocks mit gcc-compiler unter windows xp

zu den codes:

-alakazams code aus seinem ersten eintrag funktioniert wie geschmiert
-dein code gibt eine falsche, ellenlange zahl aus.
-alakzams 2.code gibt -1 aus, also funktioniert bei mir nicht

ich kapier das aber absolut nichts! die codes sind doch im prinzip identisch (oder nicht?)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

17.03.2009, 22:42

falsche, ellenlange zahl...


Zitat von »"dot"«

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...


und vielleicht nach jedem schleifendurchlauf noch n '\n' oder so. sonst siehst du ne ewig lange wurst aus allen koordinaten aller punkte (ne ellenlange zahl halt)...

17

17.03.2009, 22:53

Gratulation, du hast ein ; zuviel ;-)
Und schon ist das Problem gelöst.

War aber auch wirklich sau schwer zu finden :D
Lieber dumm fragen, als dumm bleiben!

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

18

17.03.2009, 22:56

Der Fehler ist der leere Schleifenrumpf:

C-/C++-Quelltext

1
for (i = schlange.begin(); i!=schlange.end(); ++i) /* -> */;/*< - */

Dadurch passiert während die Schleife den Iterator inkrementiert nichts, danach wird dann der mittlerweile hinter das letzte Listenelement zeigende Iterator dereferenziert.

Edit: da war doch glatt noch jemand schneller ;)

19

17.03.2009, 23:31

oh mein gott!!!!! :D

das ist ech unfaßbar. ich wede fast verrückt weil ich diesen blöden fehler nicht finde, und was ist schuld?? ein scheiß semikolon! argh"


vielen dank an alle:)

20

18.03.2009, 06:52

Was kann denn das arme Semikolon dafür? :?
Also die Schuldfrage würde ich nochmal überdenken. ;)
fka tm

Werbeanzeige