C++/Portée des variables
Résolu
Wanted59
Messages postés
44
Statut
Membre
-
Wanted59 Messages postés 44 Statut Membre -
Wanted59 Messages postés 44 Statut Membre -
Bonjour,
j'ai un problème dont je ne comprend pas la cause, j'avoue que je n'ai pas encore cherché énormément l'origine du problème mais j'avais déjà beaucoup cherché pour un problème juste précédemment 'fin bref voilà une partie de mon code où ça foire :
while(menu_extra_kuruFries)
{
SDL_WaitEvent(&event);
if(kuruFries_declarationVariables)
{
SDL_Rect positionKuruFries_kurutchin;
positionKuruFries_kurutchin.x = 50;
positionKuruFries_kurutchin.y = 75;
KuruFries_imageDeDebut = SDL_LoadBMP("Data\\Images\\KuruFries\\image_debut.bmp"); // Ligne 413
Personnage Kurutchin(SDL_LoadBMP("Data\\Images\\KuruFries\\image_kurutchin.bmp"), positionKuruFries_kurutchin);
kuruFries_declarationVariables = false;
}
switch(event.type)
{
case SDL_QUIT:
marcheDuJeu = false;
menu_extra_kuruFries = false;
break ;
case SDL_MOUSEMOTION:
positionPointeur.x = event.button.x - ((pointeur->w) / 2);
positionPointeur.y = event.button.y - ((pointeur->h) / 2);
break;
case SDL_KEYDOWN:
kuruFries_afficher_imageDeDebut = false;
}
positionKuruFries_imageDeDebut.x = 0;
positionKuruFries_imageDeDebut.y = 0;
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
if(kuruFries_afficher_imageDeDebut)
{
SDL_BlitSurface(kuruFries_imageDeDebut, NULL, ecran, &positionKuruFries_imageDeDebut);
SDL_BlitSurface(pointeur, NULL, ecran, &positionPointeur);
}
else
{
Kurutchin.afficher(ecran); // Ligne 447
SDL_BlitSurface(pointeur, NULL, ecran, &positionPointeur);
}
SDL_Flip(ecran);
}
et voilà ce que m'affiche le débuggeur :
main.cpp|413|error: `KuruFries_imageDeDebut' was not declared in this scope|
main.cpp|413|warning: unused variable 'KuruFries_imageDeDebut'|
main.cpp|447|error: `Kurutchin' was not declared in this scope|
main.cpp|447|warning: unused variable 'Kurutchin'|
||=== Build finished: 2 errors, 2 warnings ===|
'Fin bref c'est comme si le compilateur supprimé les variable a la fin de chaque "if( )" et je ne comprend pas pourquoi.
Si quelqu'un voit ce serait cool, merci d'avance.
j'ai un problème dont je ne comprend pas la cause, j'avoue que je n'ai pas encore cherché énormément l'origine du problème mais j'avais déjà beaucoup cherché pour un problème juste précédemment 'fin bref voilà une partie de mon code où ça foire :
while(menu_extra_kuruFries)
{
SDL_WaitEvent(&event);
if(kuruFries_declarationVariables)
{
SDL_Rect positionKuruFries_kurutchin;
positionKuruFries_kurutchin.x = 50;
positionKuruFries_kurutchin.y = 75;
KuruFries_imageDeDebut = SDL_LoadBMP("Data\\Images\\KuruFries\\image_debut.bmp"); // Ligne 413
Personnage Kurutchin(SDL_LoadBMP("Data\\Images\\KuruFries\\image_kurutchin.bmp"), positionKuruFries_kurutchin);
kuruFries_declarationVariables = false;
}
switch(event.type)
{
case SDL_QUIT:
marcheDuJeu = false;
menu_extra_kuruFries = false;
break ;
case SDL_MOUSEMOTION:
positionPointeur.x = event.button.x - ((pointeur->w) / 2);
positionPointeur.y = event.button.y - ((pointeur->h) / 2);
break;
case SDL_KEYDOWN:
kuruFries_afficher_imageDeDebut = false;
}
positionKuruFries_imageDeDebut.x = 0;
positionKuruFries_imageDeDebut.y = 0;
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
if(kuruFries_afficher_imageDeDebut)
{
SDL_BlitSurface(kuruFries_imageDeDebut, NULL, ecran, &positionKuruFries_imageDeDebut);
SDL_BlitSurface(pointeur, NULL, ecran, &positionPointeur);
}
else
{
Kurutchin.afficher(ecran); // Ligne 447
SDL_BlitSurface(pointeur, NULL, ecran, &positionPointeur);
}
SDL_Flip(ecran);
}
et voilà ce que m'affiche le débuggeur :
main.cpp|413|error: `KuruFries_imageDeDebut' was not declared in this scope|
main.cpp|413|warning: unused variable 'KuruFries_imageDeDebut'|
main.cpp|447|error: `Kurutchin' was not declared in this scope|
main.cpp|447|warning: unused variable 'Kurutchin'|
||=== Build finished: 2 errors, 2 warnings ===|
'Fin bref c'est comme si le compilateur supprimé les variable a la fin de chaque "if( )" et je ne comprend pas pourquoi.
Si quelqu'un voit ce serait cool, merci d'avance.
8 réponses
Je remet le bout de code qui foire :
#include <iostream>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>
#include <SDL_image.h>
#include "variables.h"
#include "kuruFries.h"
Et le super message du debuggeur :
main.cpp|413|error: `KuruFries_imageDeDebut' was not declared in this scope|
main.cpp|413|warning: unused variable 'KuruFries_imageDeDebut'|
main.cpp|447|error: `Kurutchin' was not declared in this scope|
main.cpp|447|warning: unused variable 'Kurutchin'|
||=== Build finished: 2 errors, 2 warnings ===|
Je montre aussi comment j'ai déclaré KuruFries_imageDeDebut dans kuruFries.h :
Et voilà je ne vois pas quoi mettre de plus.
A si, si je les bouges de place, genre si je les met juste en dehors du if, ça ne me met plus le bug mais vu qu'il y a une boucle je ne veux pas que l'ordi initialise des million de fois les variables sinon je ne pourrais rien en faire, 'fin bref je rame là.
#include <iostream>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>
#include <SDL_image.h>
#include "variables.h"
#include "kuruFries.h"
int main (int argc, char *argv[]) { /*.....................*/ /* ... du code ... */ /*.................I...*/ while(menu_extra) { SDL_WaitEvent(&event); if(declarationVariables) { texte_menu_extra_kuruFries = TTF_RenderText_Blended(police, "KuRu'S FrIeS" , couleurBleu); positionTexte_menu_extra_kuruFries.x = 500; positionTexte_menu_extra_kuruFries.y = 100; declarationVariables = false; } switch(event.type) { case SDL_QUIT: marcheDuJeu = false; menu_extra = false; break ; case SDL_MOUSEMOTION: positionPointeur.x = event.button.x - ((pointeur->w) / 2); positionPointeur.y = event.button.y - ((pointeur->h) / 2); break; } if(true) { if(positionPointeur.x > (positionTexte_menu_extra_kuruFries.x - 35) && positionPointeur.x < (positionTexte_menu_extra_kuruFries.x + (texte_menu_extra_kuruFries->w) - 35) && positionPointeur.y > (positionTexte_menu_extra_kuruFries.y - 30) && positionPointeur.y < (positionTexte_menu_extra_kuruFries.y + 25)) { texte_menu_extra_kuruFries = TTF_RenderText_Blended(police, "KuRu S FrIeS" , couleurJaune); switch(event.type) { case SDL_MOUSEBUTTONUP: if(event.button.button == SDL_BUTTON_LEFT) { menu_extra = false; menu_extra_kuruFries = true; } break; } } else { texte_menu_extra_kuruFries = TTF_RenderText_Blended(police, "KuRu S FrIeS" , couleurBleu); } } while(menu_extra_kuruFries) { SDL_WaitEvent(&event); if(kuruFries_declarationVariables) { KuruFries_imageDeDebut = SDL_LoadBMP("Data\\Images\\KuruFries\\image_debut.bmp"); Personnage Kurutchin(SDL_LoadBMP("Data\\Images\\KuruFries\\image_kurutchin.bmp"), positionKuruFries_kurutchin); positionKuruFries_kurutchin.x = 0; positionKuruFries_kurutchin.y = 800 - Kurutchin.returnM_personnage() / 2; kuruFries_declarationVariables = false; } switch(event.type) { case SDL_QUIT: marcheDuJeu = false; menu_extra_kuruFries = false; break ; case SDL_MOUSEMOTION: positionPointeur.x = event.button.x - ((pointeur->w) / 2); positionPointeur.y = event.button.y - ((pointeur->h) / 2); break; case SDL_KEYDOWN: kuruFries_afficher_imageDeDebut = false; } positionKuruFries_imageDeDebut.x = 0; positionKuruFries_imageDeDebut.y = 0; SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); if(kuruFries_afficher_imageDeDebut) { SDL_BlitSurface(kuruFries_imageDeDebut, NULL, ecran, &positionKuruFries_imageDeDebut); SDL_BlitSurface(pointeur, NULL, ecran, &positionPointeur); } else { Kurutchin.afficher(ecran); SDL_BlitSurface(pointeur, NULL, ecran, &positionPointeur); } SDL_Flip(ecran); } SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0)); positionTexte_menu_extra_kuruFries.x = 500 - ((texte_menu_extra_kuruFries->w) / 2); SDL_BlitSurface(texte_menu_extra_kuruFries, NULL, ecran, &positionTexte_menu_extra_kuruFries); SDL_BlitSurface(pointeur, NULL, ecran, &positionPointeur); SDL_Flip(ecran); } SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); SDL_Flip(ecran); } SDL_FreeSurface(pointeur); SDL_FreeSurface(texte_menu_solo); SDL_FreeSurface(texte_menu_solo_campagne); SDL_FreeSurface(texte_menu_solo_courseContreLaMontre); SDL_FreeSurface(texte_menu_solo_defis); SDL_FreeSurface(texte_menu_multijoueur); SDL_FreeSurface(texte_menu_option); SDL_FreeSurface(texte_menu_extra); SDL_FreeSurface(pointeur); SDL_Quit(); return 0; }
Et le super message du debuggeur :
main.cpp|413|error: `KuruFries_imageDeDebut' was not declared in this scope|
main.cpp|413|warning: unused variable 'KuruFries_imageDeDebut'|
main.cpp|447|error: `Kurutchin' was not declared in this scope|
main.cpp|447|warning: unused variable 'Kurutchin'|
||=== Build finished: 2 errors, 2 warnings ===|
Je montre aussi comment j'ai déclaré KuruFries_imageDeDebut dans kuruFries.h :
#ifndef KURUFRIES_H_INCLUDED #define KURUFRIES_H_INCLUDED #include "Personnage.h" SDL_Surface *kuruFries_imageDeDebut = NULL; SDL_Rect positionKuruFries_imageDeDebut; SDL_Rect positionKuruFries_kurutchin; bool kuruFries_declarationVariables = true; bool kuruFries_afficher_imageDeDebut = true; #endif
Et voilà je ne vois pas quoi mettre de plus.
A si, si je les bouges de place, genre si je les met juste en dehors du if, ça ne me met plus le bug mais vu qu'il y a une boucle je ne veux pas que l'ordi initialise des million de fois les variables sinon je ne pourrais rien en faire, 'fin bref je rame là.
tu déclares : kuruFries_imageDeDebut
mais tu utilises : KuruFries_imageDeDebut = SDL_LoadBMP("Data\\Images\\KuruFries\\image_debut.bmp");
ATTENTION à respecter la casse en C !
mais tu utilises : KuruFries_imageDeDebut = SDL_LoadBMP("Data\\Images\\KuruFries\\image_debut.bmp");
ATTENTION à respecter la casse en C !
Oui, certes, j'ai zappé.
J'ai remarqué qu'en C, il ne faut s'occuper que d'une erreur à la fois, en général, une erreur découle de l'autre.
Bref, pour ton personnage, il s'agît bien d'un problème de porté. Ton code bien qu'indenté, est long, il est difficle de le comprendre rapidement.
Mais j'ai remarqué que tu déclares ton personnage au nom bizarre dans un bloc if, mais que tu l'appelles en dehors de ce bloc. toute variable crée dans un bloc est détruite à sa sortie, et si tu ne rentre pas dans le bloc if, tu ne déclare pas la variable et ne peut donc pas l'utiliser ensuite.
il suffit de mettre sa déclaration au même niveau que son appel le plus élevé dans la hiérarchie des blocs.
J'ai remarqué qu'en C, il ne faut s'occuper que d'une erreur à la fois, en général, une erreur découle de l'autre.
Bref, pour ton personnage, il s'agît bien d'un problème de porté. Ton code bien qu'indenté, est long, il est difficle de le comprendre rapidement.
Mais j'ai remarqué que tu déclares ton personnage au nom bizarre dans un bloc if, mais que tu l'appelles en dehors de ce bloc. toute variable crée dans un bloc est détruite à sa sortie, et si tu ne rentre pas dans le bloc if, tu ne déclare pas la variable et ne peut donc pas l'utiliser ensuite.
il suffit de mettre sa déclaration au même niveau que son appel le plus élevé dans la hiérarchie des blocs.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
deux choses si tu utilise plusieurs forms et tu récupére des éléments de l'un dans l'autre et vice versa tu dois les inclures (include) je pense que tu l'a fait mais vaux mieux vérifier
ensuite si tu utilise une classe la notions de private et de public peuvent jouer attention il ya private et public dans ta classe mais aussi dans tout le reste de tes forms et donc de ton programme
regarde aussi si tu les à correctement déclarer ces variables, une faute d'orthographe peut tout changer
regarde déjà ça je vais me pencher un peux plus sur ton code
ensuite si tu utilise une classe la notions de private et de public peuvent jouer attention il ya private et public dans ta classe mais aussi dans tout le reste de tes forms et donc de ton programme
regarde aussi si tu les à correctement déclarer ces variables, une faute d'orthographe peut tout changer
regarde déjà ça je vais me pencher un peux plus sur ton code
Salut.
En effet, tu ne mets pas assez le contexte pour que l'on puisse répondre.
Pour répondre, il faudrait savoir où sont déclaré tes variables.
Astuce : utilise les balises de code <code > pour inclure ton source, c'est plus lisible.
En effet, tu ne mets pas assez le contexte pour que l'on puisse répondre.
Pour répondre, il faudrait savoir où sont déclaré tes variables.
Astuce : utilise les balises de code <code > pour inclure ton source, c'est plus lisible.