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

AyJay

Frischling

  • »AyJay« ist der Autor dieses Themas

Beiträge: 67

Beruf: Schule, Hobbys :D

  • Private Nachricht senden

1

15.07.2011, 10:38

C++ List problem.

Hey leute mal wieder ein KLEINES Problem. ;)
Das Problem ist in Zeile 7, wie selectiere ich eine einzige Classe in der List ?
Bzw. bekomme die ID dieser Classe in der List.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
int GetFreeAmmo(){
    int FreeAmmo = -1;
    list<Ammo>::iterator itAmmo = vAmmo.begin();
    while (itAmmo != vAmmo.end()){
        if(FreeAmmo > -1){ }else{
            if(itAmmo->inUse == false){
                FreeAmmo = *itAmmo;
            }
        }
        itAmmo++;
    }
    return FreeAmmo;
}


mfg,
Jason.

C-/C++-Quelltext

1
2
3
While(!asleep){
    sheep++;
}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »AyJay« (15.07.2011, 10:44)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

15.07.2011, 11:00

Was ist die "ID einer Classe"?
Und was stellst Du Dir vor unter "Selektieren einer einzigen Classe"?
Wenn Du ein Element in einer Liste suchen willst, ja, das geht: http://lmgtfy.com/?q=c%2B%2B+list+find
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]

3

15.07.2011, 11:18

das macht iwie nur eingeschränkt sinn:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
int GetFreeAmmo(){
    int FreeAmmo = -1;
    list<Ammo>::iterator itAmmo = vAmmo.begin();
    while (itAmmo != vAmmo.end()){
        if(FreeAmmo > -1){ }else{
            if(itAmmo->inUse == false){
                FreeAmmo = *itAmmo; // würde im nächsten schleifendurchlauf überschrieben. 
                return FreeAmmo;  //wenn du das letzte willst, fang von hinten an!
            }
        }
        itAmmo++;
    }
}


oder

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int GetFreeAmmo(){
    int FreeAmmo = -1;
    list<Ammo>::iterator itAmmo = vAmmo.begin();
    while (itAmmo != vAmmo.end()){
        if(FreeAmmo > -1){ }else{
            if(itAmmo->inUse == false){
                FreeAmmo += *itAmmo;  // aufaddieren
                //edit: geht natürlich nur mit itAmmo->getCount() oder sowas ähnlichem, 
                //*itAmmo gibt dir ein Ammo-Objekt was du schlecht aufaddieren kannst....
            }
        }
        itAmmo++;
    }
    return FreeAmmo; // summe zurückgeben
}

und mit der Class-ID: könnte es typeid sein was du suchst?
http://www.cplusplus.com/reference/std/typeinfo/type_info/

Ich weis, das macht iwie auch kein sinn. Ich glaube du musst deine Frage nochmal neu formulieren oder mal sagen was du eigentlich genau machen willst.

marfi

Treue Seele

Beiträge: 100

Wohnort: Schwerte

  • Private Nachricht senden

4

15.07.2011, 11:20

Ich nehme an du willst auf die Klasse "Ammo" von der du verschiedene Instanzen in deiner Liste speicherst zugreifen. Ich kenne mich mit list nicht so gut aus, aber itAmmo müsste der Zeiger auf dein Objekt sein. und wenn du ihn nicht dereferenzierst, kannst du damit arbeiten oder kopieren.



FreeAmmo wäre dann der Zeiger.

5

15.07.2011, 13:34

Joa,
was genau meinst du mit ID der Classe?

AyJay

Frischling

  • »AyJay« ist der Autor dieses Themas

Beiträge: 67

Beruf: Schule, Hobbys :D

  • Private Nachricht senden

6

15.07.2011, 13:47

mit der id meine ich z.b bei vector und bei array giebts ja dann bei for vAmmo da geht das aber nicht VC++ sagt dann fehler bei dem [ ?
Da wars ja dann auch so das ich FreeAmmo mit dem i gesetzt habe, aber in dem falle habe ich anscheind keine indetifikations id von dieser einen classe.

C-/C++-Quelltext

1
2
3
While(!asleep){
    sheep++;
}

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

15.07.2011, 13:54

Ich versteh kein Wort.

Ich vermute aber mal, dass du den Index in die Datenstruktur meinst. Wenn du den brauchst kannst du ja einfach eine Variable mitzählen lassen wie viel mal die Schleife iteriert.

AyJay

Frischling

  • »AyJay« ist der Autor dieses Themas

Beiträge: 67

Beruf: Schule, Hobbys :D

  • Private Nachricht senden

8

15.07.2011, 13:56

Ja genau den Index mein ich aber wie kann ich dann im nachhinein die nummer benutzten um von vAmmo die bestimmte Classe haben.

C-/C++-Quelltext

1
2
3
While(!asleep){
    sheep++;
}

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

9

15.07.2011, 14:06

Du meinst wohl ein bestimmte Instanz/ein bestimmtes Element. Wenn du ohne Vererbung arbeitest ist jedes Element in der Liste eine Instanz der gleichen Klasse.
Deshalb sind einige Vorposter davon ausgegangen ;)
Ein sehr gutes Beispiel dafür, dass es gerade bei Fehlerbeschreibungen und Fragen sehr stark auf die richtigen Begriffe ankommt.
Wofür brauchst du die denn?

edit:
Ammo ist hier auch ein schlecht gewählter Begriff.
Es geht doch eher um die Projektile die momentan unterwegs sind oder?
Du brauchst übrigens nicht mehr zählen wieviele Projektile du noch verschießen kannst, weil du sie sowieso löschen solltest, wenn sie nichtmehr unterwegs sind und mit size() abfragen kannst wie groß die Liste ist.
"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?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »NachoMan« (15.07.2011, 14:21)


10

15.07.2011, 14:10

also wenn du sowas meinst:

C-/C++-Quelltext

1
2
3
4
5
for (int i=0; i<vAmmo.size(); i++) {
   if(FreeAmmo <= -1)
            if(vAmmo[i].inUse == false)
                FreeAmmo += vAmmo[i];
}
Das funktioniert mit list nicht, da man da keinen wahlfreien Zugriff hat. Dafür brauchst du einen Vector.

So ein Ding ("i") nennt man übrigens Zählvariable und die bekommt man nicht von dem Container, also der list oder dem vector, sondern die definiert man sich selbst. Die benutzt man nur zum Zugriff mit den komischen eckigen Klammern [] die du auch schon angesprochen hast. Das nennt man Random Access oder zu deutsch wahlfreier Zugriff.

Eine list hat intern eine doppelt verkettete Liste, auf sowas kannst du keinen wahlfreien Zugriff machen, das geht nur bei Vector.

Map hat so [] zwar auch, da wird das aber intern als Baum von Key-Value paaren gespeichert, das ist wieder was anderes.

Da du aber einfach wie in deinem Codeschnipsel vom Anfang einfach nur das Ding durchlaufen willst ("traversieren") machst du das mit dem Iterator eigentlich vollkommen richtig. Vorausgesetzt natürlich du willst das machen was du tust.

gruß

Werbeanzeige