You are not logged in.

  • Login

1

Monday, June 4th 2007, 6:44pm

Dynamische "list" als statische Variable

Hallo,
Ich möchte in einer selbst geschriebenen C++-Klasse eine statische Variable anlegen.
Diese soll eine Dynamische Liste sein, welche alle Instanzen der Klasse enthällt, so dass jede Instanz jede andere kennt.
Probleme habe ich mit der C++ Syntax. Der Compiler meckert immer...
Wäre nett, wenn jemand mal Beispielcode für die .h und die .cpp Datei schreiben könnte.
Ich möchte <list> includen und eine Listen-Instanz, wie gesagt, static deklarieren.
Die liste müsste dann eine "list<MeineKlasse>" sein. Geht das so einfach?
Im Konstruktor der Klasse soll dann die Instanz selbst der Liste hinzugefügt werden.
Geht das einfach mit this->klassenliste.insert(this) ???

Vielen Dank schon einmal im Voraus!

2

Monday, June 4th 2007, 7:20pm

Moin,

findest du eine statische Variable macht hier wirklich Sinn?
Zumal (ich habe es nicht getestet) eine Methode, welche die eigene Instanz an eine (statische) Variable der eigenen Instanz übergibt schon ziemlich gewagt ist.

Warum erzeugst du die Liste nicht einfach in der main Methode und gibst nur einen Zeiger auf diese Liste in deine Klasse "Fisch" herein.

Wenn du die Liste dann außerhalb/innerhalb änderst wissen alle Instanzen von "Fisch" auch von diesen Änderungen, da sie ja sowieso nur einen Zeiger auf die Liste haben.

Und einklinken/ausklinken können sie sich auch selbst.

3

Monday, June 4th 2007, 7:42pm

Dann muss ich aber jeden Fisch von Hand in die Liste einfügen, oder?

4

Monday, June 4th 2007, 8:00pm

Also ich finde die Lösung eigentlich nicht schlecht. Schließlich wird der Konstruktor nur einmal aufgerufen und warum sollten sich die Fische dann nicht in die Liste einklinken?

Bin mit der Syntax für die static-Variable endlich klar gekommen:

------Fisch.h:

C Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef FISCH_H
#define FISCH_H
 
// hier kommen die spaeter benoetigten includes hin
#include <stdio.h>
#include <GL/glut.h>
#include <list>
using namespace std;
 
class Fisch
{
// oeffentlich sichtbarer Teil
public:
	 Fisch();											//Standardkonstruktor
         ...
 
// nicht oeffentlich sichtbarer Teil
private:
	 static list<Fisch> fischliste;
	 ...
};
#endif


------Fisch.cpp:

C Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "Fisch.h"
#include <stdio.h>
#include <GL/glut.h>
#include <list>
using namespace std;
 
//Dynamische Liste aller Fische
list<Fisch> Fisch::fischliste;
 
...
...//Variablen
 
Fisch::Fisch(void)
{
}
 
Fisch::Fisch(GLfloat fifa[4], GLfloat flofa[4], float pos[3])
{
 
	...
        ...
	this->fischliste.push_back(this); //Hier wird der Fisch hinzugefügt



Leider bekomme ich nun die Fehlermeldung:

'std::list<_Ty>::push_back': Konvertierung des Parameters 1 von 'Fisch *const ' in 'const Fisch &' nicht möglich
with
[
_Ty=Fisch
]
Ursache: Konvertierung von 'Fisch *const ' in 'const Fisch' nicht möglich
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig

Hat jemand eine Idee?

5

Monday, June 4th 2007, 8:00pm

Probiers aus ;-)

Vielleicht reicht es im Konstuktor liste->add(this) aufzurufen.
Vielleicht musst du es eben auch in der Main Methode machen.

C Quellcode

1
2
Fisch* f = new Fisch(liste);
liste->add(f);


//EDIT
Das oben bezieht sich noch auf den vorletzten Beitrag.
Zu deinem letzten: Versuch mal anders zu initialisieren

C Quellcode

1
list<Fisch*> Fisch::fischliste;

6

Monday, June 4th 2007, 9:12pm

Geht leider nicht. Des Rätsels Lösung muss in der Fehlermeldung liegen:

Konvertierung des Parameters 1 von 'Fisch *const ' in 'const Fisch &' nicht möglich

Leider hab ich keine Ahnung mehr was diesen Pointer-Kram angeht.

7

Monday, June 4th 2007, 10:41pm

Habe es gerade in Java ausprobiert und es hat wunderbar funktioniert (eine Instanz mittels this an eine statische Variable ihrer Klasse übergeben). Prinzipiell ist das also schon möglich. C++ sucks!

HasseNoobs

Unregistered

8

Thursday, May 19th 2011, 9:50am

Habe es gerade in Java ausprobiert und es hat wunderbar funktioniert (eine Instanz mittels this an eine statische Variable ihrer Klasse übergeben). Prinzipiell ist das also schon möglich. C++ sucks!
Nur weil du C++ nicht kannst, musst du nicht so darüber urteilen. Echt lächerlich.

SkatC

Unregistered

9

Thursday, May 19th 2011, 7:29pm

Schon sinnvoll das Thema nach mehreren Jahren zu kommentieren ^^

Similar threads

Social bookmarks