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

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

1

22.02.2012, 18:33

Problem beim Includieren in meinem Projekt

Hi

Ich bin dran ein Spiel zu schreiben, nur habe ich dabei Probleme mit dem Includieren.
Mein Spiel besitzt:

main.cpp - Spielgerüst
game.cpp - Spielklasse Memberfunktionen
CMob.cpp - gegnerKlasse Memberfunktionen
CPlayer - SpielerKlasse Memberfunktionen

CGame.h - Spielklasse Klassendefinition
CPlayer.h . Spielerklassendefinition
Cmob.h - gegnerklassendefinition´

So das includieren dafür bekomme ich hin
Nur hab ich auch noch eine SingletonKlasse in CRenderWindow.h mit der sf::renderWindow instance.
Ich weiß iregdnwie nicht richtig wie ich diese includieren soll, denn wenn ich sie so includiere wie ich es für richtig halte,
gibt er 50.000 fehler aus!
Er erste ist ja meistens der, der den Fehler verursacht, und da sagt er: "error C2011: 'Window': 'class' Typneudefinition" (Window ist die Singletonklasse)
Außerdem muss ich auch noch bei den meisten SFML\Graphic.h includieren.

Kann ich mal das Projekt hochladen, weil ich denke es ist zu schwer, um es ohne Material zu erklären:
Upload

Die Abhängigkeiten sind:

cmob.cpp - cmob.h, crenderwindos.h, sfml
cplayer.cpp - cplayer.h, crenderwindow.h, sfml
cgame.cpp - cgame.g, crenderwindow sfml
main.cpp - cmob.h, cplayer.h cgame.h, crenderwindows, sfml

crenderwindow.h - sfml
cplayer.h - sfml
cmob.h - sfml
cgame.h - sfml, cmob.h, cplayer.h, crenderwindow.h

Wäre cool, wenn sich mal jemand Zeit nehmen würde.
Hab auch (fast) alles ordentlich kommetiert!

Danke ProAmateur
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

22.02.2012, 18:38

Den Singleton brauchst du doch gar nicht...
Jetzt ist der ideale Zeitpunkt ihn zu entfernen.

Aber das problem ist natürlich, dass dein include guard nicht greift.

3

22.02.2012, 19:00

... oder keine Include Guards verwendet wurden. :rolleyes:
EDIT: Ich habe mir den Source nicht angeschaut, das vermute ich einfach mal so. Leider gewöhnen sich viele das falsch an und verwenden sie nie, also @alle Anfänger, auch wenn du es richtig gemacht hast: gewöhnt euch include guards an. ;)

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

4

22.02.2012, 19:06

Ne er hat welche, aber... ach guck selbst:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef CRENDERWINDOW
#define CRENDERWINDOW

template<class T>
class TSingleton
{
...
};

#endif

class Window : public TSingleton<Window>
{
...
};

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

5

22.02.2012, 19:56

Was meint ihr genau mit include Guard?
Aber ich brauche dich den singleton dass ich überall App aufrufen kann oder meint ihr das ich es lieber Global mache?
Habt ihr sonst noch eine Idee?
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

6

22.02.2012, 20:04


Aber ich brauche dich den singleton dass ich überall App aufrufen kann oder meint ihr das ich es lieber Global mache?

Nice zwei "Todsünden" in einem Satz.

Übergib die Instanz als Referenz an die Klassen die sie brauchen, alles andere zeugt eig. eher von schlecht durchdachten Design. Hatten wir in letzter Zeit ja oft das Thema.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

7

22.02.2012, 20:08

Du glaubst wirklich dass ich das jeder Funktion übergeben soll?
Aber wie macht man das denn wenn man nicht drum rumkommt?
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

8

22.02.2012, 20:11

Du glaubst wirklich dass ich das jeder Funktion übergeben soll?
Aber wie macht man das denn wenn man nicht drum rumkommt?

Wieso jeder Funktion?
Im Konstruktor übergeben und zwischenspeichern (als Referenz) und dann benutzen. Wo benötigst du es denn überall? Oder missverstehe ich dich und du meinst wirklich "Funktionen"?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

9

22.02.2012, 20:12

Man kommt immer drum rum...

Da ich es noch nicht leid bin es immer wieder zu wiederholen: Ein Singleton setzt man nicht ein, wenn man nicht will, dass es mehrere instanzen von einer Klasse gibt gibt, sondern wenn selbst das zusammenbrechen der physikalischen Gesetze noch immer bedeuten würde, dass eine zweite Instanz alles noch viel schlimmer machen würde.

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

10

22.02.2012, 20:30

Meinst du in jeder Klasse eine variable zu erstellen, auf die ich das die Referenz speichere?
Als Zeiger oder Referenz übergeben?
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

Werbeanzeige