C++/Portée des variables

Résolu/Fermé
Wanted59 Messages postés 44 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 15 octobre 2009 - 7 juin 2009 à 21:30
Wanted59 Messages postés 44 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 15 octobre 2009 - 10 juin 2009 à 18:49
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.

8 réponses

Wanted59 Messages postés 44 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 15 octobre 2009 7
8 juin 2009 à 20:01
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"

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à.
1
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 333
9 juin 2009 à 08:13
tu déclares : kuruFries_imageDeDebut
mais tu utilises : KuruFries_imageDeDebut = SDL_LoadBMP("Data\\Images\\KuruFries\\image_debut.bmp");

ATTENTION à respecter la casse en C !
1
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 333
10 juin 2009 à 08:12
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.
1
Wanted59 Messages postés 44 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 15 octobre 2009 7
8 juin 2009 à 07:51
1er up
0

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

Posez votre question
DarkAurora Messages postés 417 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 21 janvier 2013 27
8 juin 2009 à 08:03
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
0
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 333
8 juin 2009 à 08:13
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.
0
Wanted59 Messages postés 44 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 15 octobre 2009 7
10 juin 2009 à 07:42
Merci grâce à toi j'ai réglé le problème le kuruFries_imageDeDebut mais toujours pas celle du Personnage Kurutchin, merci quand même pour la résolution de la moitié de mon prob.
0
Wanted59 Messages postés 44 Date d'inscription vendredi 6 mars 2009 Statut Membre Dernière intervention 15 octobre 2009 7
10 juin 2009 à 18:49
Voilà voilà tous les probs sont réglés grace à toi, merci beaucoup en tout cas, bonne continuation et encore merci.
0