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

Nicorotom

Frischling

  • »Nicorotom« ist der Autor dieses Themas

Beiträge: 38

Wohnort: 127.0.0.1

Beruf: Schüler

  • Private Nachricht senden

1

23.05.2010, 15:13

Problem mit SFML

Tag Leute,
ich wollte heute anfangen, mein ertes 2D Spiel zu programmieren.
Habe die Include Dateien aus dem SVN in VC++ eingebunden.
Nun habe ich die Doku von SFML aufgemacht und wollte nun den Code abtippen.
Der erste Code lautet:

C-/C++-Quelltext

1
sf::RenderWindow App(sf::VideoMode(800, 600), "SFML window");


Da habe ich mir gedacht, als ich die Klasse angeguckt habe, dass das so nicht gehen kann.
Also habe ich es abgeändert:

C-/C++-Quelltext

1
sf::RenderWindow(sf::VideoMode(800, 600), "SFML window");


Mein ganzer Code lautet also:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#include "Audio.hpp"
#include "Config.hpp"
#include "Graphics.hpp"
#include "Network.hpp"
#include "System.hpp"
#include "Window.hpp"
#include "RenderWindow.hpp"

int main()
{
    sf::RenderWindow(sf::VideoMode(800, 600), "SFML window");
}


Wenn ich das so kompilen will kommen folgende Fehlermeldungen:

C-/C++-Quelltext

1
2
3
4
5
6
1>Erstes2dSpiel.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual __thiscall sf::RenderWindow::~RenderWindow(void)" (??1RenderWindow@sf@@UAE@XZ)" in Funktion "_main".
1>Erstes2dSpiel.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall sf::RenderWindow::RenderWindow(class sf::VideoMode,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,unsigned long,struct sf::WindowSettings const &)" (??0RenderWindow@sf@@QAE@VVideoMode@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@KABUWindowSettings@1@@Z)" in Funktion "_main".
1>Erstes2dSpiel.obj : 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".
1>C:\Users\Nowakowski\Documents\Visual Studio 2008\Projects\Spiele Programmierung\Erstes 2D Spiel\Debug\Erstes 2D Spiel.exe : fatal error LNK1120: 3 nicht aufgelöste externe Verweise.
1>Das Buildprotokoll wurde unter "file://c:\Users\Nowakowski\Documents\Visual Studio 2008\Projects\Spiele Programmierung\Erstes 2D Spiel\Erstes 2D Spiel\Debug\BuildLog.htm" gespeichert.
1>Erstes 2D Spiel - 4 Fehler, 0 Warnung(en)


Nun weiß ich überhaupt nicht, woran das liegen könnte :-/

Ich hoffe ihr könnt mir weiterhelfen.

Gruß,
Nicorotom

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

2

23.05.2010, 15:21

Warum sollte diese Zeile so nicht funktionieren? Du erzeugst ein Objekt vom Typ sf::RenderWindow namens app. Das sind C++ Basics.

Die Fehlermeldungen unten kommen daher, dass dem Compiler zwar die Header-Dateien von SFML bekannt sind, aber du dem Linker nicht sagst, welche Bibliotheken zu diesen Header-Dateien gehören (Projekteigenschaften -> Linker -> zusätzliche Abhängigkeiten).

Mastermind

unregistriert

3

23.05.2010, 15:33

SFML hat ein tutorial wo genau steht was du machen musst.

Nicorotom

Frischling

  • »Nicorotom« ist der Autor dieses Themas

Beiträge: 38

Wohnort: 127.0.0.1

Beruf: Schüler

  • Private Nachricht senden

4

23.05.2010, 15:36

Funktioniert komischerweise immernoch nicht o.o

Unter Linker steht nun:
Zusätzliche Bibliothekenverzeichnisse: "E:\Spiele Programmierungs Software\SFML\lib"

Allerdings kommen immernoch die gleichen Errors

//EDIT:
Habe gerade das genannte von dir gefunden.
Aber wie trage ich dort die Daten ein?
Muss ich in die Box den Pfad schreiben oder wie muss ich das eintragen?

Nicorotom

Frischling

  • »Nicorotom« ist der Autor dieses Themas

Beiträge: 38

Wohnort: 127.0.0.1

Beruf: Schüler

  • Private Nachricht senden

6

23.05.2010, 19:10

Und woher erfahre ich nun, aus welcher .lib Datei der Befehl kommt?

Muss ich nun beim kompilieren die .dll im Ordner des Programmes haben?

//EDIT:
Ich habe nun den Code fertig abgetippt und kompiliert.
2 Errors kriege ich noch:

C-/C++-Quelltext

1
2
1>Erstes2dSpiel.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""private: static unsigned int * sf::Font::ourDefaultCharset" (?ourDefaultCharset@Font@sf@@0PAIA)".
1>C:\Users\Nowakowski\Documents\Visual Studio 2008\Projects\Spiele Programmierung\Erstes 2D Spiel\Debug\Erstes 2D Spiel.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.


Woran können diese Fehler liegen?
Alle .dll sind vorhanden und die .lib sind alle eingetragen

//EDIT2:
Ich habe das nun soweit zum laufen bekommen.
Wenn ich nun allerdings das Programm debugge, dann öffnet er mir eine Konsole(?!?) und schreibt dort irgendwelch komische Zeichen rein und öffnet dann ein zweites Windows Fenster.
Der PC fängt dabei an, durchgehend zu piepen und dann meldet mir VC++ einen Pufferüberlauf.
Ich habe bei VC++ beim erstellen Leeres Projekt gewählt(ist doch richtig oder nicht?).
Aber wieso öffnet sich die Konsole??

Hier der komplette Code:

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "Audio.hpp"
#include "Config.hpp"
#include "Graphics.hpp"
#include "Network.hpp"
#include "System.hpp"
#include "Window.hpp"

int main()
{
    //Erstellen des Fensters
    sf::RenderWindow App(sf::VideoMode(800, 600), "SFML window");

    //Bild laden
    sf::Image Image;
    if(!Image.LoadFromFile("char.JPG"))
    {
        return 1;
    }
    sf::Sprite Sprite(Image);

    //String erstellung
    sf::Font Arial;
    if(!Arial.LoadFromFile("arial.ttf"))
    {
        return 1;
    }
    sf::String Text("Hello SFML",Arial,50);

    //Game
    while(App.IsOpened())
    {
        sf::Event Event;
        while(App.GetEvent(Event))
        {
            if(Event.Type==sf::Event::Closed)
            {
                App.Close();
            }
        }
        
        App.Clear();
        App.Draw(Sprite);
        App.Draw(Text);
        App.Display();
    }
    return 0;
}

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Nicorotom« (23.05.2010, 19:50)


7

23.05.2010, 20:08

Stell das Subsystem in den Projekteigenschaften unter Linker auf Windows und ersetz die main durch eine WinMain, dann erscheint auch keine Konsole mehr.
Ich weiß es dauert viel zu lange, aber ich habe echt nur Pech. Habe mir heute mal eben im Zeigefinger Nerv und Sehne durchtrennt. Dennoch kann es nicht mehr all zu lange dauern mit dem Tutorial. Außerdem kamen auch noch Prüfungen und dergleichen dazwischen.
Klatscht die Hopper an die Wand, Deutschland ist ein Raverland! :D

Mastermind

unregistriert

8

23.05.2010, 20:15

Wieso sollte er das wollen?

Sinnvoller wäre es wenn er sich erstmal an das Tutorial hielte bis wenigstens das läuft.

Nicorotom

Frischling

  • »Nicorotom« ist der Autor dieses Themas

Beiträge: 38

Wohnort: 127.0.0.1

Beruf: Schüler

  • Private Nachricht senden

9

23.05.2010, 20:22

Die Konsole ist mir momentan noch recht egal, der Code soll erstmal laufen ;)
War es denn richtig, dass ich Leeres Projekt gewählt habe, oder hätte ich etwas anderes wählen müssen?

Mastermind

unregistriert

10

23.05.2010, 21:02

Hast du wirklich alles zu 100% so gemacht wie in dem Link von Genion beschrieben?

Werbeanzeige