C++ SFML : Spécificateur de Substitution Inconnu

Fermé
Faydhax - Modifié le 29 mai 2022 à 08:22
 Faydhax - 1 juin 2022 à 10:26
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

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
29 mai 2022 à 11:18
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
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
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
29 mai 2022 à 18:17
Si le type
RectangleShape
est bien visible, c'est que son nom est incomplet, il fait écrire
sf::RectangleShape
au lieu de
RectangleShape
.
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
30 mai 2022 à 20:50
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
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