Problème avec les classes et les pointeurs
Bonjour, je suis en train de réécrire un programme réalisé il y a quelques jours pour qu'il soit plus performant, j'ai donc voulu utiliser les pointeurs mais quelques problèmes sont arrivés :aie:
Dans Player.h
Code:
1 2 3 4 5 6 7 8
|
class Player
{
public:
void Init();
void Update(int VelocityX, int VelocityY);
int PlayerPosX, PlayerPosY;
}; |
Dans Player.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
#include "Player.h"
void Player::Init()
{
PlayerPosX = 0;
PlayerPosY = 0;
}
void Player::Update(int VelocityX, int VelocityY)
{
PlayerPosX += VelocityX;
PlayerPosY += VelocityY;
} |
Dans EventsManager.h
Code:
1 2 3 4 5 6 7 8
|
#include <SFML\Graphics.hpp>
#include "Player.h"
class EventsManager
{
public:
void Input(sf::Event Event, sf::RenderWindow *window, Player *Player);
}; |
Dans EventsManager.cpp
Code:
1 2 3 4 5 6 7 8 9 10
|
#include "EventsManager.h"
void EventsManager::Input(sf::Event Event, sf::RenderWindow *window, Player *Player)
{
if (Event.type == sf::Event::Closed)
window->close();
else if (Event.type == sf::Keyboard::isKeyPressed(sf::Keyboard::S))
Player->PlayerPosX += 5;
} |
Dans Application/h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#include <SFML\Graphics.hpp>
#include "Player.h"
#include "EventsManager.h"
#include <iostream>
class Application
{
public:
void Init();
void Run();
void Update();
private:
int Win_WIDTH, Win_HEIGHT;
sf::RenderWindow GameWindow;
sf::Event GameEvent;
EventsManager GameEvents;
Player GamePlayer;
}; |
Dans Application.cpp
Code:
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
|
#include "Application.h"
void Application::Init()
{
//Create the window
Win_WIDTH = 1920;
Win_HEIGHT = 1080;
GameWindow.create(sf::VideoMode(Win_WIDTH, Win_HEIGHT), "TwoDCraft!", sf::Style::Default);
GameWindow.setFramerateLimit(60);
GameWindow.setPosition(sf::Vector2i(0, 0));
//Init the player
GamePlayer.Init();
}
void Application::Run()
{
while (GameWindow.isOpen())
{
while (GameWindow.pollEvent(GameEvent))
{
GameEvents.Input(GameEvent, &GameWindow, &GamePlayer);
}
}
} |
Et dans le main
Code:
1 2 3 4 5 6 7 8 9 10
|
#include "Application.h"
int main()
{
Application App;
App.Init();
App.Run();
return 0;
} |
Le programme utilise SFML, peut être aurai je dût placer cette discussion dans les bibilothèques mais le problème ne concerne pas SFML. Voici mon problème : La méthode Input de EventsManager n'arrive pas à accéder et à modifier PlayerPosX
Voici le log :
Code:
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
|
1>------ Début de la génération*: Projet*: TwoDCraftReWork, Configuration*: Debug Win32 ------
1> main.cpp
1>f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\player.h(2): error C2011: 'Player'*: redéfinition du type 'class'
1> f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\player.h(2): note: voir la déclaration de 'Player'
1>f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\application.h(20): error C2079: 'Application::GamePlayer' utilise une class de 'Player' non défini
1> EventsManager.cpp
1>f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\eventsmanager.cpp(7): warning C4805: '=='*: mélange risqué de type 'sf::Event::EventType' et de type 'bool' dans l'opération
1> Application.cpp
1>f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\player.h(2): error C2011: 'Player'*: redéfinition du type 'class'
1> f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\player.h(2): note: voir la déclaration de 'Player'
1>f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\application.h(20): error C2079: 'Application::GamePlayer' utilise une class de 'Player' non défini
1>f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\application.cpp(13): error C2228: la partie gauche de '.Init' doit avoir un class/struct/union
1> f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\application.cpp(13): note: le type est 'int'
1>f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\application.cpp(16): error C2228: la partie gauche de '.PlayerPosX' doit avoir un class/struct/union
1> f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\application.cpp(16): note: le type est 'int'
1>f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\application.cpp(16): error C2228: la partie gauche de '.PlayerPosY' doit avoir un class/struct/union
1> f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\application.cpp(16): note: le type est 'int'
1>f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\application.cpp(25): error C2664: 'void EventsManager::Input(sf::Event,sf::RenderWindow *,Player *)'*: impossible de convertir l'argument 3 de 'int *' en 'Player *'
1> f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\application.cpp(25): note: Les types pointés n'ont aucun rapport entre eux*; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
1>f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\application.cpp(35): error C2228: la partie gauche de '.PlayerPosX' doit avoir un class/struct/union
1> f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\application.cpp(35): note: le type est 'int'
1>f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\application.cpp(35): error C2228: la partie gauche de '.PlayerPosY' doit avoir un class/struct/union
1> f:\documents\programmation\visual studio 2015\projects\twodcraftrework\twodcraftrework\application.cpp(35): note: le type est 'int'
1> Génération de code en cours...
========== Génération*: 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ========== |
J'espère que vous aurez compris mon problème et je vous remercie d'avance de votre aide
Bonne journée ;)