/ / Bezeichner nicht in Variablen und Funktionen mit Argumenten gefunden - C ++, Visual-Studio-2012, Bezeichner

Identifikator nicht gefunden in Variablen und Funktionen mit Argumenten - C ++, Visual-Studio-2012, Bezeichner

Ich benutze VS Ultimate 2012 und versuche, eine Klasse zu erstellen, aber alle Variablen und Funktionen, die einen Parameter haben, geben immer "Kennung nicht gefunden" zurück.

Die Funktionen update (), run (), etc. funktionieren einwandfrei.

Ich habe versucht, zu definieren, zum Beispiel: mIsMovingUp (falsch) und Game :: mIsMovingUp in der .cpp-Datei, aber keine funktionierte, und ich bin wirklich hier stecken.

Fehler:

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

Code:

//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 "..Headersgame.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();
}

Antworten:

1 für die Antwort № 1

#include "..Headersgame.h" ist verdächtig. Du solltest haben #include "game.h" und lassen Sie Ihre Include-Pfade ordnungsgemäß einrichten.

Vielleicht enthält es tatsächlich eine alte Version der Datei, in der diese Dinge nicht in der Klasse Spiel definiert sind.

Um das zu testen, könntest du etwas Müll in game.h stecken und sehen, ob es dazu führt game.cpp um einen Compilerfehler zu geben