C++ SFML : Spécificateur de Substitution Inconnu
Faydhax
-
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" :
Ma création d'un pointeur sur un tableau de Platform
Ma fonction "PlatformCreate" (dans main.cpp) :
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 !!
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
-
Bonjour,
Le compilateur ne semble savoir ce qu'estRectangleShape
d'où les 2 erreurs sur cette ligne.
Peut-être manque-t-il l'include
qui apporte la définition deRectangleShape
avant ta définition de lastruct Platform
. -
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. -
Si le type
RectangleShape
est bien visible, c'est que son nom est incomplet, il fait écriresf::RectangleShape
au lieu deRectangleShape
. -
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'includemain.h
- J'ai bien orthographié Platform
Je sais pas quoi faire avec ce programme XD -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Exactement, la même réponse que pour .
RectangleShape
:
Le compilateur ne semble savoir ce qu'estPlatform
d'où ton erreur sur cette ligne.
Peut-être manque-t-il l'include
qui apporte la définition destruct Platform
avant ta définition de labool 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éfinistruct Platform
, est-ce dans ce main.h ? Je ne sais pas! -
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 deBlock::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 pointeurPlatform* 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.