C++ SFML : Spécificateur de Substitution Inconnu

Faydhax -  
 Faydhax -
Bonjour,

je programme un jeu de platform.
Dans ce jeu j'ai donc 5 plateformes, elles sont déclarées par une structure et initialisées par une fonction. Le tout dans le main.h et main.cpp .
J'utilise la class sf::RectangleShape de SFML mais le compilateur me met cette erreur :

Gravité : Erreur
Code : C3646
Description : 'platform_rect' : spécificateur de substitution inconnu
Fichier : Main.h
Ligne : 15

Ma structure "Platform" :

struct Platform {
 RectangleShape platform_rect;        // <-- La ligne 15

 int posX;
 int posY;
 int width;
 int height;

 void RandomPosition();
};


Ma création d'un pointeur sur un tableau de Platform

Platform* platforms = new Platform[5];


Ma fonction "PlatformCreate" (dans main.cpp) :

void PlatformCreate(Platform* platforms) 
{
 for (int i = 0; i < 5; i++)
 {
  platforms[i].width = 100;
  platforms[i].height= 25;
  platforms[i].platform_rect = RectangleShape(Vector2f(platforms[i].width, platforms[i].height));
 }
}


Dernière chose :
Cette erreur engendre une autre erreur (enfin je pense que ça vient de ça) :

Descripition : spécificateur de type manquant - int est pris en compte par défaut.
Remarque : C++ ne prend pas en charge int par défaut.
Ligne : 15

Voilà, je suis encore très débutant, désolé si le programme n'est pas très propre...
Merci d'avance !!

Configuration: Windo</code>ws / Firefox 100.0

6 réponses

  1. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    Bonjour,

    Le compilateur ne semble savoir ce qu'est
    RectangleShape
    d'où les 2 erreurs sur cette ligne.
    Peut-être manque-t-il l'
    include
    qui apporte la définition de
    RectangleShape
    avant ta définition de la
    struct Platform
    .
    0
  2. Faydhax
     
    J'utilise déjà
    RetangleShape
    a d'autres endroits de mon programme et il marche très bien...
    Si l'include dont tu parle est
    #include "Main.h"

    dans le main.cpp, il y est bien.
    J'ai aussi fait le
    #include "SFML-graphics.h"

    pour associer le répertoire de ma librairie où se situe sf:: RectangleShape
    C'est pour ça que je comprend pas, le programme semble bon... Je suis sur VC++ 2022 si ça peut être utile.
    0
  3. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    Si le type
    RectangleShape
    est bien visible, c'est que son nom est incomplet, il fait écrire
    sf::RectangleShape
    au lieu de
    RectangleShape
    .
    0
  4. Faydhax
     
    L'erreur est résolue, merci beaucoup !
    Mais j'ai une autre erreur dans le programme du même genre :

    J'ai une fonction GroundDetect qui prend en parrametre mon pointeur sur des platformes.

    La définition :

    bool Block::GroundDetect(Platform* platforms)
    {
    	if (Y_block > WIN_HEIGHT - blockSize) { return true; }
    	else { return false; }
    
    	for (int i = 0; i < 5; i++)
    	{
    		if (Y_block + blockSize == platforms[i].posY 
    			&& X_block + blockSize > platforms[i].posX
    			&& X_block < platforms[i].posX + platforms[i].width) 
    		{ return true; }
    
    		else { return false; }
    	}
    }


    Et j'ai une erreur dans la déclaration :

    bool GroundDetect(Platform* platform);
    L.47

    Gravité : Erreur
    Code : C2061
    Description : erreur de syntaxe : identificateur 'Platform'
    Ligne : 47


    J'en ai conclu que Platform n'était pas détecté en tant que structure mais :
    - J'ai bien mis l'include
    main.h

    - J'ai bien orthographié Platform

    Je sais pas quoi faire avec ce programme XD
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    Exactement, la même réponse que pour .
    RectangleShape
    :
    Le compilateur ne semble savoir ce qu'est
    Platform
    d'où ton erreur sur cette ligne.
    Peut-être manque-t-il l'
    include
    qui apporte la définition de
    struct Platform
    avant ta définition de la
    bool Block::GroundDetect(Platform* platforms)
    .

    PS: Et ma boule de cristal étant en réparation, je n'ai toujours aucune idée du fichier d'entête où tu as défini
    struct Platform
    , est-ce dans ce main.h ? Je ne sais pas!
    0
  7. Faydhax
     
    XD
    Pardon, je pensais que tu te souviendrais tu premier post ou j'ai précisé que ma structure faisait partie de main.h
    Enfin ducoup j'ai vérifié et l'include est bien mise sur le fichier de la déclaration et de la définition de
    Block::GroundDetect
    .
    J'ai testé encore une fois et l'erreur n'a pas disparue miraculeusement !

    Pour un récap : La structure est déclaré dans le main.h, ainsi que mon pointeur
    Platform* platforms;

    Je les inclue donc sur block.h (déclartion de GroundDetect)
    ET sur block.cpp (définition de GroundDetect) .

    PS : Block est une classe pour le personnage de mon jeu de plateforme.
    0