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

01.07.2010, 10:58

Problem beim erstellen eines Programms

Hallo Leute ich habe ein Großes Problem. Ich bekomme immer die Fehlermeldung:

C-/C++-Quelltext

1
2
 error LNK2019: unresolved external symbol "public: void __thiscall Player::Show(class sf::RenderWindow &)" (?Show@Player@@QAEXAAVRenderWindow@sf@@@Z) referenced in function _main
 error LNK2019: unresolved external symbol "public: void __thiscall Player::Move(class sf::RenderWindow const &)" (?Move@Player@@QAEXABVRenderWindow@sf@@@Z) referenced in function _main


weiß aber nicht warum ?

kann mir einer helfen. Ich möchte da gerne eine Figur bewegen in SFML

Hier mal der 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
Player.h
#pragma once
#include "stdInc.h"

class Player
{
public:
    Player(void);
    ~Player(void);

    void Move( const sf::RenderWindow &App );
    void Show( sf::RenderWindow &App );

    
    
    unsigned int frame;
    enum {spriteSpeed = 100};
    sf::Sprite Sprite;

    
    std::vector<sf::IntRect>  leftSprites;
    std::vector<sf::IntRect>  StandingSprites;


private: 
    


};


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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Player.cpp

#include "Player.h"
#include "stdInc.h"

Player::Player(void) : frame()
{
    sf::Image PlayImage; 
    PlayImage.LoadFromFile("Data\\Models\\Caveman\\Walking\\Walkingleft.png");
    Sprite.SetImage(PlayImage);
    Sprite.SetPosition(200.f, 100.f);
    Sprite.SetScale(0.8f, 0.8f);
    

    // IntRect Coords
    /*
      Nur die LeftCoord und die RightCoord bewegen sich. Wie ein Filmstreifen wo oben und unten immer Gleich ist.
    */
    int LeftCoord = 0; // ist Rechts
    int TopCoord = 96; // ist Oben, Sollte gleich bleiben 
    int RightCoord = 96; // ist Links
    int BottomCord = 192; // ist Unten, Sollte gleich bleiben 

    // Intrect Sprungweite
    
    const int RectJump = 96;

    for(int i = 0; i < 8; i++)
    {
            leftSprites.push_back(sf::IntRect(LeftCoord, TopCoord, RightCoord, BottomCord));
            LeftCoord += RectJump;
            RightCoord += RectJump;
    }

}

Player::~Player(void)
{
}


void Show( sf::RenderWindow &App)
{
    class Player *Player=0;
    App.Draw(Player->Sprite);
    
}

void Move(const sf::RenderWindow &App )
{

    float delta = App.GetFrameTime() * Player::spriteSpeed;
    class Player *Player=0;

    if(App.GetInput().IsKeyDown(sf::Key::Left))
    {
        Player->Sprite.SetSubRect(Player->leftSprites[Player->frame]);
        Player->Sprite.Move(-delta,0);
    }

    if(Player->frame <= Player->leftSprites.size() -1)
    {
        Player->frame = 0;
    }
    

}


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
Main.cpp

#include "stdInc.h"
#include "Player.h"

int main()
{
    
    sf::RenderWindow App(sf::VideoMode(800, 600, 32), "First Game");
    class Player *Player=0;
    //FreeConsole();
    while(App.IsOpened())
    {   
//      LeftKeyDown = Input.IsMouseButtonDown(sf::Mouse::Button::Left);

        sf::Event Event;
        while (App.GetEvent(Event))
        {
            // Close window : exit
            if (Event.Type == sf::Event::Closed)
                App.Close();

            // Escape key : exit
            if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
                App.Close();
        }
        
        
        Player->Move(App);
        
        App.Clear();

        Player->Show(App);
        // Display window contents on screen
        App.Display();
    }

}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Xervos« (01.07.2010, 11:51)


2

01.07.2010, 11:13

In player.cpp hast du vor den Methoden Move und Show das Player:: vergessen.

Und bitte nicht mehr solche nichts sagende Thread-Titel!
fka tm

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TrikkieMikkie« (01.07.2010, 11:23)


3

01.07.2010, 11:50

Sry werde ich nicht mehr machen.

danke dir auf jeden fall. Habe ich voll übersehen aber jetzt bekomm ich immer eine Access violation wenn ich das Mache

C-/C++-Quelltext

1
2
3
4
   if(Player->frame <= Player->leftSprites.size() -1)
    {
        Player->frame = 0;
    }


das ist bei der Move funktion. Fehler kommt dann wenn ich Player->frame aufrufe

4

01.07.2010, 12:02

Glaube, du hast da einen mächtigen Denkfehler drin. ;)

In Move und Show definierst du jeweils "class Player *Player=0;"
Arbeitest also mit einem Null-Zeiger.

Außerdem frage ich mich, was die Klassen-Definitionen in den Methoden zu suchen haben.
fka tm

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

5

01.07.2010, 16:02

Ich würde empfehlen nochmal einen Schritt zurück zu machen und das Kapitel über Klassen und Objekte nochmal zu lesen (Oder wenn du kein Buch dafür hast würde ich dir empfehlen dir eines zuzulegen).

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

6

01.07.2010, 17:54

ja sieht für mich auch nach nem tutorialopfer aus^^

das kapitel über zeiger und dynamische speicherverwaltung würd auch nicht schaden.
"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?

Werbeanzeige