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
Dans Player.h
Dans Player.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class Player { public: void Init(); void Update(int VelocityX, int VelocityY); int PlayerPosX, PlayerPosY; };
Dans EventsManager.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Application/h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; };
Et dans le main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } } }
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #include "Application.h" int main() { Application App; App.Init(); App.Run(); return 0; }
Voici le log :
J'espère que vous aurez compris mon problème et je vous remercie d'avance de votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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é ==========
Bonne journée
Partager