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

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

1

06.08.2006, 19:31

[Solved] std::list problem

Ich habe eine Klasse, die eine std::list verwendet.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
class Scene
{
private:
  std::list<ILightSceneNode*>   lights_;
public:
  std::list<ILightSceneNode*> const& getLights() const {return lights_;}
  void addLightSceneNode(...) {...}
};


Mein Problem ist nun, dass die Liste immer nur dann Elemente enthält, wenn ich mich im Funktionsrump einer Methode der Klasse Scenen befinde.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
int main()
{
  Scene s;
  //Hier zeigt der Debugger Listenläng = 0 an

  s.addLightSceneNode();  //Am Ende deses Funktionskörpers wird 1 angezeigt

  //Hier (also nach dem Ausführen der Funktion) hat die Liste wieder 0 Elemente

  s.addLightSceneNode(...); //Am Ende deses Funktionskörpers wird 2 angezeigt

//Hier wieder 0

}


Auch die Funktion getLights() liefert mir ein Liste mit 0 Elementen?

Kann mir jemand helfen?

mfg Philipp

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

06.08.2006, 20:16

Zeig mal die Implementierung von addLightSceneNode.

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

3

06.08.2006, 22:01

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
ILightSceneNode* Scene::addLightSceneNode(std::wstring const& name,
                                                          ILightSceneNode::Lighttype type,
                                                          Vec3 const& position,
                                                          Color const& ambient,
                                                          Color const& diffuse,
                                                          Color const& specular,
                                                          __real range,
                                                          Vec3 const& direction,
                                                          __real phi,
                                                          __real theta,
                                                          __real falloff,
                                                          __real att0,
                                                          __real att1,
                                                          __real att2)
{
  id_lights_counter_ += 2;
  ILightSceneNode* node = LightsFactory::Instance().CreateObject(type, name, id_lights_counter_,
    type, position, direction, ambient, diffuse, specular, range, phi, theta, falloff,
    att0, att1, att2);
  lights_.push_back(node);
  return node;
}

mfg Philipp

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

06.08.2006, 22:58

Vielleicht zeigt der Debugger einfach nur falsche Daten an.
Lass dir mal mit der size()-Methode die Größe der Liste ausgeben.

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

5

06.08.2006, 23:51

liefert auch 0

mfg Philipp

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

6

07.08.2006, 09:49

Ich hab den Fehler endlich gefunden.
Ich hab folgnedes gemacht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
class Base
{
  protected:
    std::list<ILightSceneNode*> lights_;
};

class Derived : public Base
{
  private:
    std::list<ILightSceneNode*> lights_;
};


Ich hab also 2 mal den Member lights_ deklariert.
Einmal ist der eine, dann der andere genommen worden, wenn ich in einer Klassenmethode war, eben der der Schon mit was befüllt war, sonst überall der leere.
Was mir aber unverständlich ist, ist dass der Compiler sich bei diesem Code nicht aufgeregt hat. Naja egal, jetzt gehts ja wieder.
Solche Fehler werden mich definitiv nochmal ins Grab bringen :lol:

mfg Philipp

Werbeanzeige