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

05.03.2010, 19:54

klassen-zeiger-array != klassen-listen-iteratoren-zugriff

Ich möchte die Adresse einer bestimmten Instanz einer Klasse aus einer Liste der Klasse in einem Zeiger speichern. :shock:
Habe aber Probleme mit der Syntax :oops:
Klingt verwirrend, aber hier mein Code Ausschnitt:

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
58
59
60
61
62
63
64
65
//Es folgt die Klasse,ist natürlich eigentlich um einiges größer

class Ckrieger
{
    public:
        int xpos;
        int ypos;
};

//Hier kommt der Code-Auschnitt


extern int x;
extern int y;

list<Ckrieger> lkrieger(krieger);
list<Ckrieger>::iterator i;

void truppenbewegen ()
{
    int besetzung;
    int x2 = 0;
    int y2 = 0;
    int x3 = 0;
    int x4 = 0;
    Ckrieger *soldatenaufruf[10];
    int zaehler = 0;

    //1.Koordinatenprüfung des Standorts


    cout << "Wähle die zu bewegenden Truppen" << endl;
    besetzung = koordinatenprüfen ();
    x2 = x;
    y2 = y;

    //2.Koordinatenprüfung des Zielorts


    if (besetzung == 1)
    {
        cout << "Wohin sollen die Truppen geschickt werden?" <<endl;
        besetzung = koordinatenprüfen ();
        x3 = x;
        y3 = y;
        if (besetzung < 3)
        {
            //3.Aufrufen der Truppen


            for (i=lkrieger.begin ();i!=lkrieger.end ();i++)
            {
                if (i->xpos == x2)
                {
                    if (i->ypos == y2)
                    {
                        //Was kommt hierhin damit ich mit soldatenaufruf den zeiger auf der entsprechenden Ckrieger Instanz speichern kann?

                        zaehler++;
                    }
                }
            }           

            cout << "Die Truppen wurden bewegt" << endl;
        }
    }
    else
    {
        cout << "Hier stehen keine eigenen Truppen" << endl;
    }
}

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

05.03.2010, 20:23

Du willst ja die Adresse eines Objektes haben. Dafür musst du den Iterator dereferenzieren und dann kannst du da normal die Adresse nehmen.

C-/C++-Quelltext

1
2
3
4
5
if (i->ypos == y2)
                    {
                        CKrieger* p =  &(*i);
                        zaehler++;
                    } 


Musst dann halt einfach darauf aufpassen, dass der Zeiger nicht mehr benutzt wird, wenn du die Elemente wieder löscht.

btw:

C-/C++-Quelltext

1
besetzung = koordinatenprüfen (); 

Uäh.. Keine Umlaute! Am besten englische Bezeichner benutzen und wenn nicht, dann benutz wenigstens keine Umlaute!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

3

05.03.2010, 20:24

was willst du damit erreichen?
das dürfte mit "&(*i)" gehen

edit: bah ne minute zu lang geknobelt was er da versucht^^
"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?

4

05.03.2010, 20:32

Jaa, keine soo tolle Fragestellung ;)
aber ihr habts ja rausgekriegt^^
Es funzt, danke!

Werbeanzeige