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

C Discussion :

Problème utilisation d'un tableau de variables en global


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    c
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 7
    Localisation : Belgique

    Informations professionnelles :
    Activité : c

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Problème utilisation d'un tableau de variables en global
    Bonjour,

    j'ai un problème avec mon code, lors de la compilation j'obtiens ce message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error: subscripted value is neither array nor pointer nor vector
    qui semble être causé par un tableau de variables global.

    Voici le code:

    main.c

    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
    21
    22
    23
    24
    25
    26
    #include "SDLbot.c"
    #include "wordGeneration.c"
     
    int coordinates[100][100][10][3], locationX, locationY, coordinateX, coordinateY, type, displayDistance;
    short numberElements, i;
     
    int main()
    {
        initialisation();
     
        /*
        create command interpreter in individual thread
        */
     
        wordGeneration();
     
        /*
        display word
        SDLbot processes
        SDLbot answers
        word changes
        loop
        */
     
        return 0;
    }
    SDLbot.c

    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
    extern int coordinates, locationX, locationY, coordinateX, coordinateY, displayDistance;
     
    void initialisation()
    {
        locationX = 50;
        locationY = 50;
        coordinateX = 500;
        coordinateY = 500;
        displayDistance = 4;
    }
     
    int SDLbot()
    {
     
     
        return 0;
    }
    wordGeneration.c

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #include <stdlib.h>
     
    extern int coordinates, locationX, locationY, coordinateX, coordinateY, type, displayDistance, x, y;
    short numberElements, i;
     
    void wordGeneration()
    {
        x = locationX;
        y = locationY;
     
        x =- displayDistance;
        y =- displayDistance;
     
        //word generation
     
        for(; x < locationX + displayDistance; x++)
        {
            for(; y < locationY + displayDistance; y++)
            {
                //contents chunk checking and filling
     
                if(coordinates[x][y][0][2] == 0)
                {
                    numberElements = rand() % 9;
                    for(i = 0; i < numberElements; i++)
                    {
                        coordinates[x][y][i][2] = rand() % 3;
                        coordinates[x][y][i][0] = rand() % 1000;
                        coordinates[x][y][i][1] = rand() % 1000;
                    }
     
                    coordinates[x][y][0][2] = 1;
                }
            }
        }
    }
    Le même message d'erreur m'est affiché pour le fichier wordGeneration.c à toutes les lignes contenant le tableau coordinates, je vois pas où se trouve le problème, quelqu'un pourrait m'aider ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Dans tes fichiers SDLbot.c et wordGeneration.c, tu as déclaré

    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern int coordinates[100][100][10][3]
    coordinates n'est donc plus considéré comme un tableau de 4 dimensions, mais un simple int qui ne peut pas être indexé comme te le dit le message d'erreur.

    Citation Envoyé par somethingbetter Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        x =- displayDistance;
        y =- displayDistance;
    Tu veux sûrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        x -= displayDistance;
        y -= displayDistance;
    à savoir décrémenter x et y de displayDistance et non les affecter à -displayDistance.

    Sinon, tu es fâché avec les variables locales et le passage en paramètre ?
    Dernière modification par Invité ; 18/02/2018 à 18h55.

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Et les nombres magiques ? Je sens venir que la suite du code va avoir beaucoup de valeurs numériques en dur

    Hop hop ! Des constantes ! Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #define DEFAUT_LOCATION_X    ((int) 50)
    #define DEFAUT_LOCATION_Y    ((int) 50)
     
    void initialisation()
    {
        locationX = DEFAUT_LOCATION_X;
        locationY = DEFAUT_LOCATION_Y;
        // ....
    }

  4. #4
    Candidat au Club
    Homme Profil pro
    c
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 7
    Localisation : Belgique

    Informations professionnelles :
    Activité : c

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos conseils.

    Vous pensez que je devrais garder les variables en local et les donner en paramètre aux différentes fonctions ? Dans ce cas comment devrais-je m'y prendre ? Est-ce que la structure de données convient ? Par exemple :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    struct definition
    {
    	int chunkX;
    	int chunkY;
     
    	int coordonneeX;
    	int coordonneeY;
    	int type;
    };
     
    int initialiseMonde(definition unique)
    {
    	unique.chunkX = ...;
    	...
    	...	
    }
     
    void affiche(definition unique)
    {
    	...
    }
     
     
    int main()
    {
    	definition unique;
     
    	initialiseMonde(unique);
     
     
     
    	affiche(unique);
     
    	return 0;
    }
    Mais après comment faire pour repprendre les valeurs modifiées dans le main ?

    Quelque chose comme ça peut-être ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    definition initialiseMonde(definition unique)
    {
    	return unique;
    }

  5. #5
    Candidat au Club
    Homme Profil pro
    c
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 7
    Localisation : Belgique

    Informations professionnelles :
    Activité : c

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Je crois que je viens de trouver la solution, c'est une histoire de pointeur.

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    C'est l'idée

    Effectivement, il faut passer des pointeurs sur tes structures pour les modifier dans tes fonctions. Sinon, tu travailles sur une copie à l'intérieur des fonctions et tu "ne vois pas les changements" dans le main().

    Il te faudra aussi sans doute un typedef, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct
    {
    	int chunkX;
    	int chunkY;
     
    	int coordonneeX;
    	int coordonneeY;
    	int type;
    } definition;

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/01/2010, 06h49
  2. Réponses: 0
    Dernier message: 10/04/2008, 12h31
  3. problème utilisation de variables
    Par idjou dans le forum Langage
    Réponses: 4
    Dernier message: 01/06/2007, 13h19
  4. Problème dans l'utilisation d'un tableau
    Par NoiBe dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 16/05/2007, 16h19
  5. probléme dans l'utilisation d'un tableau
    Par hamoudasafira dans le forum C++
    Réponses: 10
    Dernier message: 13/12/2006, 08h50

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