CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[c++] missing ';' before '*'

Dam979
Dam979
Niveau 7
27 juin 2015 à 23:57:04

Salut tout le monde,

Je suis face a un problème que je ne comprend absolument pas.
Quand j'essaye de compiler, Visual Studio me met l'erreur "missing ';' before '*'" (ainsi qu'une chiée d'autres erreurs). Pourtant, j'ai juste voulu définir une methode dans un fichier .cpp. Voici le code en simplifié pour vous montrer le problème.

Player.h :


#include "../Mob.h"

class Player : public Mob
{
private :
       sf::Sprite m_Sprite;
       sf::Texture m_Texture;
public :
       Player()
       {
             //chargement de la texture et assignation au sprite
       }

       void render(){}//on s'en fou, le probleme n'est pas ici

       void update()
       {
              move();
       }

protected :
       void move();
};

Player.cpp :


#include "Player.h"

void Player::move()
{
}

Level.h :


class Level 
{
private :
       Player* player; // ---> l'erreur est ici
public :
       //blablabla
};

Voila le code.
Si je remplace dans "Player.h" "void move();" par "void move(){}", tout compile sans soucis.
Je suppose que j'ai du foirer un truc dans mes includes mais je comprend pas du tout ou. J'ai beau comparer avec mes autres programmes, je n'ai jamais eu de cas similaire.

J’espère que vous pourrez m'aider a résoudre ce problème. Merci d'avance.

Pseudo supprimé
Pseudo supprimé 28 juin 2015 à 00:03:47

comment il sait ce qu'est un Player dans Level.h ?

il s'agit d'un pointeur ici donc pas besoin d'inclure player.h
tu peux écrire

class Player; pour lui dire "t'inquiètes la classe Player existe et est bien défini"

et dans player.h

tu fais appel à move() avant de l'avoir défini et implementer,

donc, soit tu mets le protected avant les public
soit je te conseillerai d'implementer les methodes à part que dans la classe, c'est plus propre

la seul différence sera qu'ici tes fonctions sont implicitement inline, tu n'auras que les mettre inline explicitement dans player.cpp

Message édité le 28 juin 2015 à 00:04:51 par Pseudo supprimé
Dam979
Dam979
Niveau 7
28 juin 2015 à 00:38:54

Donc je viens de changer quelques trucs.

Premièrement, j'avais oublié de noter que j'avais mis "#include "../blablabla/Player.h" dans "Level.h". Pour finir, j'ai viré le pointeur de player, j'ai directement mis un objet player.

Ou sinon, j'ai défini toutes les méthodes faisant quelques lignes et s’appelant entres-elles dans le fichier .cpp. Le problème, c'est que j'ai une nouvelle erreur dans une autre classe.
En fait, la structure est un peu plus compliquée que dans le code que j'ai écrit, mais en gros, ça se résume à ça : Entity -> Mob -> Player (les "->" c'est de l'héritage).
Maintenant, j'ai l'erreur suivante "Entity : base class undefined". J'ai du merder quelque part dans mon héritage.

Mob :


#pragma once

#include "../Entity.h"

class Mob : public Entity
{ //--> l'erreur est ici
public :
	Mob(sf::Vector2f coordinates, Level* level) : Entity(coordinates, level) {}

	void render(sf::RenderWindow* window)
	{
		window->draw(m_Sprite);
	}
};

Entity :


#pragma once

#include <SFML/System/Vector2.hpp>
#include <SFML/Graphics.hpp>
#include "../Level/Level.h"

class Entity
{
protected :
	sf::Vector2f m_Coordinates;
	Level* m_Level;

	sf::Sprite m_Sprite;
	sf::Texture m_Texture;
protected :
	void move();
public :
	Entity(sf::Vector2f coordinates, Level* level) 
		: m_Coordinates(coordinates), m_Level(level) 
	{}

	void update();
	void render(sf::RenderWindow* window) {}
};

Je viens de lire quelques posts sur des forums, mais aucun ne correspond à mon cas.
Désolé de dévier du sujet de base mais c'est frustrant, j'ai envie de coder moi :snif:

Candystand
Candystand
Niveau 10
28 juin 2015 à 01:34:24

Si je remplace dans "Player.h" "void move();" par "void move(){}, tout compile sans soucis."

pourquoi ne pas faire ça du coup? je comprends pas trop :(

Message édité le 28 juin 2015 à 01:34:44 par Candystand
Dam979
Dam979
Niveau 7
28 juin 2015 à 01:38:37

Ben tout coder dans un '.h" c'est pas super, non ? (parce que si ça change rien, a quoi servent les ".cpp" ?)

Puis au final, j'ai de nouveau la même erreur qu'avant en plus :(
Franchement, je comprend pas. J'ai pas fait énormément de programme en c++ pour l'instant mais c'est la première fois que je tombe sur ce genre d'erreur.
Je dois vraiment faire de la merde sans m'en rendre compte bordel.

Pseudo supprimé
Pseudo supprimé 28 juin 2015 à 02:02:00

ton entity.h est certainement inclus dans le entity.cpp j'imagine

le #pragma once fait en sorte que ton entity.h soit inclus qu'une seule fois

donc quand tu essayes de l'inclure ensuite dans le mob.h, ça ne l'inclus pas, puisqu'il a déjà été inclus dans le entity.cpp

donc le compilo voit pas ce qu'est la classe entity lorsque tu fais l'héritage à Mob, puisque entity.h n'est pas inclus

 #pragma once j'ai jamais utilisé ça, d'habitude je fais plutôt le classique

#ifndef ENTITY
#define ENTITY

ma classe

#endif

mais bon, je viens de checké et apparemment #pragma once est equivalent

je te conseille d'écrire class Entity; dans Mob.h avant le class Mob : public Entity

et tu enlèves le #include de Entity.h qu'il y a dans Mob.h mais tu le laisses dans Entity.cpp

Message édité le 28 juin 2015 à 02:03:04 par Pseudo supprimé
Dam979
Dam979
Niveau 7
28 juin 2015 à 03:55:24

Je viens de changer tous mes "#pragma once" mais ça ne change rien.
J'ai aussi rajouté le "class Entity", ça n'a rien changé non plus, exactement la même erreur qu'avant. Si je retire l'include mais que j'écrit le "class Entity", non seulement il considère que ce "class Entity" est une classe non définie, mais en plus, je dois inclure a nouveau les autres includes de la classe Entity.

Pseudo supprimé
Pseudo supprimé 28 juin 2015 à 04:01:14

Le 28 juin 2015 à 03:55:24 Dam979 a écrit :
Je viens de changer tous mes "#pragma once" mais ça ne change rien.
J'ai aussi rajouté le "class Entity", ça n'a rien changé non plus, exactement la même erreur qu'avant. Si je retire l'include mais que j'écrit le "class Entity", non seulement il considère que ce "class Entity" est une classe non définie, mais en plus, je dois inclure a nouveau les autres includes de la classe Entity.

tu as mis :

class Entity;

et ça te dit que Entity n'est pas défini ?
alors là je comprends pas, class Entity; est une déclaration

met tout ton code sur pastebin.com l'intégralité de tous les fichiers sans rien modifier, poste les tels qu'ils sont
et copie colle les erreurs exacts, avec les numeros de ligne etc

papy386
papy386
Niveau 10
03 juillet 2015 à 12:09:30

Include "player.h" dans level.h tout simplement!

Je me demande si on apprend la conception de nos jours!

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment