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

PcMaster97

Frischling

  • »PcMaster97« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Kulmbach

Beruf: Schüler

  • Private Nachricht senden

1

30.12.2010, 16:01

SFML Problem "Open a Window"

Hallo,
ich habe jetzt das Tutorial auf der offizielen Seite namens "Open a Window" gemacht, allerdings nach dem ich alles so gemacht hab wie in dem Tutorial und das dann kompiliert habe, hat er mir Fehler wie z.b. app = nicht deklarierter Bezeichner, Links von ".Display" muss sich eine Klasse/Struktur/Union befinden.
Dann habe ich mir den Quelltext gedownloadet und wollte den kompilieren, die gleichen fehler !
Die Projekteinstellungen hab ich wie im ersten Tutorial für VisualStudio. Gelinkt hab ich statisch.
Ich weiß jetzt nicht weiter :cursing:

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

2

30.12.2010, 16:31

mhm zeig doch mal deinen kompletten Code und alle Fehler, die ausgeben werden. Dann können wir deutlich besser helfen als nur mit "Qelltext ist von der Seite" und Fehler sind beispielsweise dieser.
Im Grunde sagt dir der Kompiler, dass du app nicht deklariert hast. Das kann jetzt aber auch daran liegen, dass er bspw. davor schon den Fehler ausgegeben hat, dass er sf::Window nicht kennt. Also zeige doch einfach mal, wie du es jetzt genau hast und was der Kompiler alles an Fehlern ausspuckt.

Bei mir funktioniert der Code im Übrigen problemlos. Allerdings habe ich in meiner Test-App auch nur dynamisch gelinkt. Da du offensichtlich aber keine Linker-Fehler bekommst, muss der Fehler woanders liegen.

Das ist im Übrigen der Code, den ich verwende:

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
////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include <SFML/Window.hpp>
#pragma comment(lib,"sfml-window-d.lib")

////////////////////////////////////////////////////////////
/// Entry point of application
///
/// \return Application exit code
///
////////////////////////////////////////////////////////////
int main()
{
    // Create the main window
    sf::Window App(sf::VideoMode(800, 600, 32), "SFML Window");

    // Start main loop
    bool Running = true;
    while (Running)
    {
        App.Display();
    }

    return EXIT_SUCCESS;
}

PcMaster97

Frischling

  • »PcMaster97« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Kulmbach

Beruf: Schüler

  • Private Nachricht senden

3

30.12.2010, 16:48

Ich versteh des net ganz, dein Quelltext funktioniert (allerdings nur wenn man dynamisch linkt).
Der Quelltext den man dort Downloaden konnte (der müsste ja eigentlich gehn) ging aber net.

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
////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include <SFML/Window.hpp>


////////////////////////////////////////////////////////////
/// Entry point of application
///
/// \return Application exit code
///
////////////////////////////////////////////////////////////
int main()
{
    // Create the main window
    sf::Window App(sf::VideoMode(800, 600, 32), "SFML Window");

    // Start main loop
    bool Running = true;
    while (Running)
    {
        App.Display();
    }

    return EXIT_SUCCESS;
}


Folgende Fehler :

Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual __thiscall sf::Window::~Window(void)" (??1Window@sf@@UAE@XZ)" in Funktion "_main". main.obj

Fehler 2 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall sf::Window:Display(void)" (?Display@Window@sf@@QAEXXZ)" in Funktion "_main". main.obj

Fehler 3 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall sf::Window::Window(class sf::VideoMode,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,unsigned long,struct sf::WindowSettings const &)" (??0Window@sf@@QAE@VVideoMode@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@KABUWindowSettings@1@@Z)" in Funktion "_main". main.obj

Fehler 4 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall sf::VideoMode::VideoMode(unsigned int,unsigned int,unsigned int)" (??0VideoMode@sf@@QAE@III@Z)" in Funktion "_main". main.obj

Fehler 5 fatal error LNK1120: 4 nicht aufgelöste externe Verweise. C:\Users\Hannes\Documents\Visual Studio 2008\Projects\sfml_ueben\Debug\sfml_ueben.exe

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

4

30.12.2010, 16:52

Mein Quelltext ist der herunterladbare bis auf eine Zeile:

C-/C++-Quelltext

1
#pragma comment(lib,"sfml-window.lib")

Diese Zeile linkt einfach die SFML-Window Libary.
Du scheinst offensichtlich Fehler beim Linken gemacht zu haben. Denn das ist es was dir deine Fehlermeldungen sagen. Er möchte gerne, dass du die SFML-Window Libary auch wirklich linkst ;)

5

30.12.2010, 16:52

Hast Du beim statischen Linken auch die Libraries mit dem -s gelinkt? Bei Debug-Static also dann: "SFML-window-d-s.lib" (wenn ich's richtig im Kopf habe)

PcMaster97

Frischling

  • »PcMaster97« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Kulmbach

Beruf: Schüler

  • Private Nachricht senden

6

30.12.2010, 16:56

@Fred : Ok, danke. Aber warum stand des net im downloadbaren Quelltext ?
@Codevine : Ja ich hab des mit dem -s gelinkt, aber im Tutorial stand nicht "SFML-window-d-s.lib" sondern "SFML-window-s-d.lib"

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

7

30.12.2010, 17:04

Nun das steht deshalb nicht drin, weil man die Linkereinstellungen ja normalerweise in der IDE einstellen kann. Also über die Projekteinstellungen.
#pragma comment wird aber afaik nicht von allen Kompilern unterstützt. Daher steht es nicht ikm Quelltext.

EDIT: Wo hast du denn genau eingestellt, dass du statisch linken willst?

PcMaster97

Frischling

  • »PcMaster97« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Kulmbach

Beruf: Schüler

  • Private Nachricht senden

8

30.12.2010, 17:07

Ich hab in der Projektmappe mit Rechtsklick die Eigenschaften geöffnet, und dann war genau das fenster wie im tutorial da, und dann hab ich des halt wie im tutorial eingestellt.

PcMaster97

Frischling

  • »PcMaster97« ist der Autor dieses Themas

Beiträge: 17

Wohnort: Kulmbach

Beruf: Schüler

  • Private Nachricht senden

9

30.12.2010, 17:18

ich muss ja eigentlich in jedem projekt die sfml-system.lib oder halt bei debuggen sfml-system-d.lib linken, und
dass mach ich ja in den Projekteinstellungen, kann ich da dann auch andere Libarys einfach mit komma abgegrenzt linken ?

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

10

30.12.2010, 17:20

Ach ja DAS Tutorial ;)

du musst die sfml-system-s-d.lib linken. Du linkst statisch ;)

Also dieser Code läuft bei mir einwandfrei(ich habe die Einstellungen in den Code übernommen und in Klammer dazugeschrieben, wo man das in den Projekteinstellungen einstellt)

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
31
32
33
////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
// SFML statisch linken(Projekteinstellungen->C++->Präprozessor)
#define SFML_STATIC

// Includes
#include <SFML/Window.hpp>

// Libs dem Projekt hinzufügen(Projekteinstellungen->Linker->Eingabe)
#pragma comment(lib, "sfml-system-s-d.lib")
#pragma comment(lib, "sfml-window-s-d.lib")

////////////////////////////////////////////////////////////
/// Entry point of application
///
/// \return Application exit code
///
////////////////////////////////////////////////////////////
int main()
{
    // Create the main window
    sf::Window App(sf::VideoMode(800, 600, 32), "SFML Window");

    // Start main loop
    bool Running = true;
    while (Running)
    {
        App.Display();
    }

    return EXIT_SUCCESS;
}

Werbeanzeige