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

1

18.06.2011, 12:22

main.cpp|23|error: structure 'GFX' with uninitialized reference members

Hey
ich hab ein problem wenn ich bei einer Header Datei

C-/C++-Quelltext

1
2
private:
sf::RenderWindow &App;
schreibe steht da, das es ein Fehler in der main.cpp Datei gibt und ohne den Code funktioniert es problemlos.

main.cpp:

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
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include "IMG.h"

int main()
{
sf::RenderWindow Test(sf::VideoMode(800, 600, 32), "Test", sf::Style::Fullscreen);
sf::Event Event;
while(Test.IsOpened())
{
    while(Test.GetEvent(Event))
    {
        if(Event.Type == sf::Event::Closed)
        {
            Test.Close();
        }
        if((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
        {
            Test.Close();
        }
    }
    IMG GFX;
    GFX.Load_sprites();
    Test.Display();
}

}


IMG.cpp:


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#include <SFML/Graphics.hpp>
#include "IMG.h"

int IMG::Load()
{
sf::Image Logo;
if(!Logo.LoadFromFile("data//Logo.jpg"))
{
    return EXIT_FAILURE;
}
sf::Sprite S_Logo (Logo);
}


IMG.h:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef IMG_H_INCLUDED
#define IMG_H_INCLUDED
#include <SFML/Graphics.hpp>

class IMG
{
    public:
        int Load();
    private:
        sf::RenderWindow &App;
};


#endif


HELP

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »C++-Coder« (18.06.2011, 12:29)


Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

2

18.06.2011, 12:34

Du versuchtst in Z.:23 in Main.cpp IMG::Load_sprites() aufzurufen, obwohl die Klasse nur eine Funktion namens Load() besitzt!

3

18.06.2011, 12:38

geht immernoch ned :(
ich hatte es falsch gemacht aber davor ging es ohne

C-/C++-Quelltext

1
2
    private:
        sf::RenderWindow &App;
und mit geht es ned

4

18.06.2011, 12:54

findet keiner den fehler? :(

JRJ

Treue Seele

Beiträge: 113

Wohnort: Tirol

Beruf: Schüler

  • Private Nachricht senden

5

18.06.2011, 12:55

Du machst eine Referenz und die kann nicht NULL sein. Desshalb musst du im Konstruktor App eine Adresse geben. Probier mal sf::RenderWindow *App;

6

18.06.2011, 12:56

danke :thumbsup:
es geht

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

7

18.06.2011, 12:59

Du machst eine Referenz und die kann nicht NULL sein. Desshalb musst du im Konstruktor App eine Adresse geben. Probier mal sf::RenderWindow *App;

Hier wird der Zeiger auf nicht NULL sein -.-
Eine Referenz ist schon richtig, so ist er gezwungen sie zu Initialisieren, er muss halt nur wissen wie.
(Nicht nur) dafür gibt es Konstruktoren und Initialisierungslisten.

Damit gehts:

C-/C++-Quelltext

1
2
public:
IMG(sf::RenderWindow &app):App(app){}


Allerdings frag ich mich wofür dein Imageloader eine Referenz auf das Window benötigt.
"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?

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

8

18.06.2011, 13:02

Ich verstehe auch den Sinn der Load-Methode nicht ganz. Dir ist schon klar, dass S_Logo beim Beenden der Funktion zerstört wird und du das Sprite S_Logo nicht verwenden kannst? Es wäre sinnvoller, S_Logo private in der Klasse zu deklarieren ;)

Die Funktion gibt außerdem nach erfolgreichem Beenden nichts zurück.

9

18.06.2011, 13:03

ich wollte es dann schon so machen


App.Draw(dann das sprite);

@BurningWave

wie meinst du des?

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

10

18.06.2011, 13:07

int IMG::Load()
{
sf::Image Logo;
if(!Logo.LoadFromFile("data//Logo.jpg"))
{
return EXIT_FAILURE;
}
sf::Sprite S_Logo (Logo);

//hier sollte return EXIT_OK (oder so was) stehen
} //hier verlässt S_Logo den Gültigkeitsberich

Werbeanzeige