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

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

1

29.10.2012, 21:49

Klasseninstanz in einer Klasse erstellen

Hallo,
Ich bin gerade dabei eine Animationsklasse zu schreiben und muss dafür eine Klasseninstanz in einer anderen Klasse erstellen. In dem Tutorial, mit welchem ich Arbeite, ist das problemlos möglich. Bei mir allerdings sagt der Compiler, dass ein ';' fehlt. Ihr einmal der Klassencode:

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
#ifndef PLAYER_H
#define PLAYER_H

#include "StdAfx.h"

class Player
{
    private:
        sf::Texture  playerTexture;
        int frameCounter, switchFrame;
        float x, y;
        int currentFrameX, currentFrameY;
        float moveSpeed;

        // Animation Instanz
        Animation playerAnimation; // hier liegt das Problem - Laut Compiler fehlt hier ein ';' vor 'playerAnimation', allerdings kann ich diese Instanz                   
                                                         // problemlos verwenden

    public:
        void init();
        void loadContent();
        void update(sf::RenderWindow &Window, sf::Clock &Clock);
        void draw(sf::RenderWindow &Window);
};

#endif

2

29.10.2012, 21:52

Was meinst du mit du kannst es problemlos verwenden? In der Codevervollständigung wird es angezeigt oder wie?

Wahrscheinlich braucht eine Instanze von Animation einige Parameter, aber du kannst es nicht einfach so hinschreiben. Du könntest entweder einen Pointer zu der Klasse machen und pew new/delete oder smart pointer benutzten oder bei der Deklaration und Definition von Animation so schreiben, dass es keine Parameter braucht.

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

3

29.10.2012, 21:58

Naja das ist noch keine Instanz, dass ist nur die Deklaration einer Membervariable, die Instanzierung kommt dann erst im Konstruktor (falls dort nichts angegeben wird, dann wird der Default Konstruktor der Animations Klasse verwendet).
Hat also mit dem hier überhaupt nichts zu tun:

Zitat

Wahrscheinlich braucht eine Instanze von Animation einige Parameter, aber du kannst es nicht einfach so hinschreiben. Du könntest entweder einen Pointer zu der Klasse machen und pew new/delete oder smart pointer benutzten oder bei der Deklaration und Definition von Animation so schreiben, dass es keine Parameter braucht.


Zum Problem selbst. Inkludierst du die Header für die Animations und SFML Klassen im StdAfx.h? Wenn du nicht absolut sicher bist wie StdAfx.h zu verwenden ist, dann rat ich dir davon ab... ;)
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

4

29.10.2012, 22:06

Das ist ja das seltsame! Animation erwartet keine Parameter. Ich habe extra eine init() Funktion für Animation geschrieben und diese benötigt erst die benötigten Parameter. Animation hat keinen definierten Konstruktor.

Ja, ich geb zu, dass ich noch nicht lange mit der StdAfx arbeite, aber bei meinen anderen kleinen Projekten hats bisher immer funktioniert...

5

29.10.2012, 22:08

Animation hat keinen definierten Konstruktor.


;)

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

6

29.10.2012, 22:09

Das ist ja das seltsame! Animation erwartet keine Parameter. Ich habe extra eine init() Funktion für Animation geschrieben und diese benötigt erst die benötigten Parameter. Animation hat keinen definierten Konstruktor.
Hat es wohl, aber nicht von dir definiert sondern durch den Compiler. Wenn kein Konstruktor angegeben wird, dann wird ein Default Konstruktor vom Kompiler erstellt.

Und ich kann es nur noch einmal betonen, hier get es nicht um Instanzen, sondern um eine simple Deklaration... (Lest doch noch einmal in eurem C++ Buch unter Klassen nach ;) )
Ich würde immer noch behaupten, dass irgend etwas im StdAfx.h Header falsch läuft.
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

7

29.10.2012, 22:11

ok, dann probier ich es erst nochmal ohne StdAfx danke schon mal!

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

8

29.10.2012, 22:14

Hier noch einmal mit einem Beispiel

MyClass.hpp

C-/C++-Quelltext

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

// Inkludiere Animations Klasse
#include "Animation.hpp"

class MyClass
{
public:
    MyClass(); // Konstruktor
    
private:
    Animation m_ani; // Deklaration (!= Definition != Instanz)
};

#endif // MYCLASS_HPP


MyClass.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
#include "MyClass.hpp"

MyClass() : // Konstruktor mit Initialisierungsliste
    m_ani() // Initialisierung der Animationsklasse
{

}
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

9

29.10.2012, 22:21

:/ Problem bleibt bestehen -.-*
Habs jetzt so gemacht, wie in deinem Beispiel beschrieben. Abgesehen von der Sache mit dem Konstruktor, weil ich eben gerne den default Konstrukter verwenden würde:

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
#ifndef PLAYER_H
#define PLAYER_H

#include "Animation.h"

class Player
{
    private:
        sf::Texture  playerTexture;
        int frameCounter, switchFrame;
        float x, y;
        int currentFrameX, currentFrameY;
        float moveSpeed;

        
    public:

        // Animation Instanz
        Animation playerAnimation;

        void init();
        void loadContent();
        void update(sf::RenderWindow &Window, sf::Clock &Clock);
        void draw(sf::RenderWindow &Window);
};

#endif

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

10

29.10.2012, 22:37

Versuche mal alle Membervariabeln einzel zu deklarieren, also so:

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
#ifndef PLAYER_H
#define PLAYER_H

#include "Animation.h"

class Player
{
    private:
        sf::Texture playerTexture;
        int frameCounter;
        int switchFrame;
        float x;
        float y;
        int currentFrameX;
        int currentFrameY;
        float moveSpeed;

        
    public:

        // Animation Instanz
        Animation playerAnimation;

        void init();
        void loadContent();
        void update(sf::RenderWindow &Window, sf::Clock &Clock);
        void draw(sf::RenderWindow &Window);
};

#endif
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

Werbeanzeige