IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Exess element in scalar initializer [SDL 2.0]


Sujet :

SDL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 17
    Points
    17
    Par défaut Exess element in scalar initializer
    Bonjour,

    On nous a donner un nouveaux projet à réaliser, on doit coder le jeux de la tour de Hanoi, cependant le nombre de tige doit pouvoirs être choisit. J'ai donc essayer ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
        void DrawRodes()
    {
            int x[numberOfRode]={};
            int y[numberOfRode]={};
            int i;
     
            for (i=1;i<numberOfRode+2;i++)
            {
                x[i] = i*(width/(numberOfRode+1))-(rodewidth/2);
                y[i] = height-rodeheight;
            }
            for (i=0;i<numberOfRode;i++)
            {
                SDL_Rect *rode = {x[i],y[i],rodewidth,rodeheight};
                SDL_RenderDrawRect(rendere,&rode);
                SDL_RenderPresent(rendere);
                SDL_Delay(500);
            }
            return;
    }
    Cependant j'ai un message d'erreur qui me dit : " warning exess elements in the scalar initializer "
    Je ne comprend pas d'ou cela vient et comment y remédier

  2. #2
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Je pense que cela est à cause de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int x[numberOfRode]={};
    int y[numberOfRode]={};
    qui n'est pas initialisé .
    Par contre si "numberOfRode" est une variable, alors ce genre de code est interdit , cela marche avec certain compilateurs mais ce n'est pas standard ! (ce qui peut aussi expliquer l'erreur).
    L'autre point , il y'a trop de variable global , ce qui est clairement déconseillé.

    Et dernier point , tu fait trop de SDL_Delay , SDL_Delay est principalement fait pour avoir des FPS constant , pas stopper le programme à chaque fois que tu affiche un truc !
    (tu te rend compte que si tu affiche un truc 100 fois , tu attendrais 50 secondes ! C'est énorme pour une seule frame ).

    Conclusion , le code est très très mauvais , je te conseille d’être plus attentif et rigoureux sur ce que tu code (je te déconseillerai même le C pour faire du jeu , vu les erreurs , cela prend plusieurs mois pour éviter de tels erreurs basique et des années pour être à l'aise en C ) , ce qui n'est pas forcément intéressant si ton but est de faire du Jeux Vidéo.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    numberOfRode est donner au début du programme dans un #define donc je suppose qu'on peux faire ainsi.
    Je vais penser a mettre en private toute les variable propre à des fonction au lieux de les laisser en global.
    Je vais enlever tout les SDL_Delay en trop, c'est juste que j'en avait besoin pour voire ce que faisait mon programme, sans ca je voyais seulement un grand rectangle apparaitre d'un coup.

    Je me doute que le code n'est pas bon, on n'a jamais fait de C et on me demande de réaliser des projets comme la tour de Hanoi et tétris ^^ du coup je me débrouille un peux en cherchant des fonctions sur internet mais c'est mes premiers programmes en C.
    Je vais ajuster mon programme espérant que l'erreur parte
    D'ailleur pour comprendre ce qui n'allait pas j’avais crée un projet tout simple qui crée une fenêtre son render et ou je traçait un rectangle mais j'avais les même erreur
    je vais tester je reviendrais si je ne trouve toujours aucune solution
    Merci pour les conseilles^^

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Pour debuger en mode pas à pas, utilise le debuger en mode pas à pas..

    L'erreur est sur quelle ligne ? Le compilo l'indique, merci de nous l'indiquer.
    Je suppose celle-ci vue qu'elle est fausse : SDL_Rect *rode = {x[i],y[i],rodewidth,rodeheight}; parce que tu déclares un pointeur sans raison.
    Et la ligne suivante est toute aussi fausse, la doc indique très clairement que SDL_RenderDrawRect prend pour 2nd paramètre un const SDL_Rect*, et &rode est un SDL_Rect**.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    l’erreur était bien sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_Rect *rode = {x[i],y[i],rodewidth,rodeheight};
    dans tout les tuto que j'ai vue ou lu le SDL_Rect était rédiger de la même façon, ca avait jamais pauser de problème ni de warning. D'aileurs je vien de tester si j'enlève le "&" la fonction ne trace plus. Après c'est peut être plusieurs erreur qui s'entrecoupe du coup ça fonctionne

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Si tu vois un tuto qui fout une * ici tu peux l'oublier immédiatement.
    Tu dois utiliser un tuto comme source d'infos et non le recopier bêtement. La doc est plus importante et c'est pas en essayant des syntaxes au hasard que ça va fonctionner.
    Tu as certainement des cours déjà faits ou prévus pour y parvenir. Et des professeurs pour t'aiguiller.
    Les tableaux x et y n'ont absolument aucune utilité dans ce code.
    La première boucle est un nid à bug vues les bornes [1, numberOfRode+2[ utilisées.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup j'ai enlever les tableaux et cela fonctionne parfaitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        void DrawRodes()
    {
            int x[numberOfRode]={};
            int i;
            int y =height-rodeheight;
     
            for (i=0;i<numberOfRode;i++)
            {
                SDL_Rect rode = {(i+1)*(width/(numberOfRode+1))-(rodewidth/2),y,rodewidth ,rodeheight};
                SDL_RenderFillRect(rendere,&rode);
            }
            return;
    }
    j'ai toujours "SDL_RenderFillRect(rendere,&rode);" si j'enleve le "&" cela ne fonctionne pas. Sinon merci beaucoup je ferrais au plus simple la prochaine fois tout fonctionne parfiatement, même si je ne sait toujours pas pourquoi l'ancien code affichait ce qu'il affichait

    Du coup le "*" c'est un pointeur si j'ai bien compris , et il faut le mettre avec des "typedef" comme SDL_Window *window et SDL_Rendere *rendere
    le but est d'alleger l'écriture et d'économiser des ressources c'est bien ca ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur: initializer element is not constant
    Par d'Oursse dans le forum C
    Réponses: 2
    Dernier message: 13/07/2013, 12h13
  2. [Flex/Bison] Erreur 11 : initializer element is not constant
    Par henri93 dans le forum Générateurs de compilateur
    Réponses: 1
    Dernier message: 12/11/2010, 16h23
  3. [State Event] Eléments Initial & Entry point
    Par Emerica dans le forum Autres Diagrammes
    Réponses: 2
    Dernier message: 12/11/2004, 14h50
  4. [XSLT]position d'un element de valeur specifique
    Par squat dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 25/07/2002, 16h42
  5. trier un tableau et compter des elements du tableau
    Par remi51 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 17/06/2002, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo