2015-03-02 26 views
1

我使用VS終極2012年,並試圖做一個類,但所有變量和函數有一個參數不斷返回「標識符未找到」。標識符沒有在參數變量和函數中找到

函數update(),run()等工作得很好。

我嘗試在.cpp文件中定義例如mIsMovingUp(false)和Game :: mIsMovingUp,但都無法工作,而且我真的被困在這裏。

錯誤:

game.cpp(24): error C2039: 'handlePlayerInput' : is not a member of 'Game' 
game.h(7) : see declaration of 'Game' 
game.cpp(27): error C2065: 'mIsMovingUp' : undeclared identifier 
game.cpp(29): error C2065: 'mIsMovingDown' : undeclared identifier 
game.cpp(31): error C2065: 'mIsMovingLeft' : undeclared identifier 
game.cpp(33): error C2065: 'IsMovingRight' : undeclared identifier 
game.cpp(62): error C2065: 'mIsMovingUp' : undeclared identifier 
game.cpp(64): error C2065: 'mIsMovingDown' : undeclared identifier 
game.cpp(66): error C2065: 'mIsMovingLeft' : undeclared identifier 
game.cpp(68): error C2065: 'mIsMovingRight' : undeclared identifier 

代碼:

//game.h 
#ifndef GAME_H 
#define GAME_H 

#include <SFML/Graphics.hpp> 

class Game 
{ 
    public: 
     Game(); 
     void run(); 

    private: 
     void processEvents(); 
     void handlePlayerInput(sf::Keyboard::Key key, bool isPressed); 
     void update(); 
     void render(); 

    private: 
     sf::RenderWindow mWindow; 
     sf::CircleShape mPlayer; 

     bool mIsMovingUp; 
     bool mIsMovingDown; 
     bool mIsMovingRight; 
     bool mIsMovingLeft; 


}; 

#endif 

//game.cpp 
#include "..\Headers\game.h" 

Game::Game() 
    : mWindow(sf::VideoMode(640, 480), "Beginning") 
    , mPlayer() 


{ 
    mPlayer.setRadius(40.f); 
    mPlayer.setPosition(100.f, 100.f); 
    mPlayer.setFillColor(sf::Color::Cyan); 
} 

void Game::run() 
{ 
    while (mWindow.isOpen()) 
    { 
     processEvents(); 
     update(); 
     render(); 
    } 
} 

void Game::handlePlayerInput(sf::Keyboard::Key key, bool isPressed) //error 
{ 
    if (key == sf::Keyboard::W) 
     mIsMovingUp = isPressed;    //error 
    else if (key == sf::Keyboard::S) 
     mIsMovingDown = isPressed;    //error 
    else if (key == sf::Keyboard::A) 
     mIsMovingLeft = isPressed;    //error 
    else if (key == sf::Keyboard::D) 
     IsMovingRight = isPressed;    //error 
} 

void Game::processEvents() 
{ 
    sf::Event event; 
    while (mWindow.pollEvent(event)) 
    { 
     switch (event.type) 
     { 
     case sf::Event::KeyPressed: 
      handlePlayerInput(event.key.code, true); 
      break; 
     case sf::Event::KeyReleased: 
      handlePlayerInput(event.key.code, false); 
      break; 
     case sf::Event::Closed: 
      mWindow.close(); 
      break; 
     } 
    } 
} 

void Game::update() 
{ 
    sf::Vector2f movement(0.f, 0.f); 

    if (mIsMovingUp)     //error 
     movement.y -= 1.f; 
    if (mIsMovingDown)     //error 
     movement.y += 1.f; 
    if (mIsMovingLeft)     //error 
     movement.x -= 1.f; 
    if (mIsMovingRight)    //error 
     movement.x += 1.f; 

    mPlayer.move(movement); 
} 

void Game::render() 
{ 
    mWindow.clear(); 
    mWindow.draw(mPlayer); 
    mWindow.display(); 
} 

//main.cpp 
#include "game.h" 

int main() 
{ 
    Game game; 
    game.run(); 
} 
+0

我認爲你需要包括'SFML/Window.hpp'在'game.h'到能夠使用'sf :: Keyboard'。 – emlai 2015-03-02 23:51:30

+0

不是這樣,它不能解釋變量。 https://github.com/LaurentGomila/SFML-Game-Development-Book/blob/master/01_Intro/Include/Book/Game.hpp此代碼的原作者未包含鍵盤或窗口 – 2015-03-02 23:58:23

+0

一個錯誤是「IsMovingRight = isPressed;'缺少前面的'm'。這不是很有幫助。 – TriHard8 2015-03-02 23:59:02

回答

1

#include "..\Headers\game.h"是可疑的。你應該有#include "game.h"並且你的包含路徑設置正確。

也許它實際上包括一箇舊版本的文件,它沒有在Game類中定義的那些東西。

爲了測試這一點,你可以把一些垃圾變成game.h,看看它是否會導致game.cpp給一個編譯器錯誤