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 :

faire appel a un tableau sur un fichier externe


Sujet :

C++

  1. #1
    Invité de passage
    Homme Profil pro
    Archéologue
    Inscrit en
    Août 2026
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Archéologue

    Informations forums :
    Inscription : Août 2026
    Messages : 3
    Par défaut faire appel a un tableau sur un fichier externe
    Bonjour, je développe en débutant un petit programme perso.
    j'utilise CLion sur MacOS

    Comme je commence à avoir pas mal de tableaux, j'ai trouvé plus propre de les placer dans un autre fichier.
    Mais ma demande dd'appel de fonctionne plus

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
        int EQUmax = PerEQU[per]+CEQU[c]+TEQU[t]+PEQU[p];

    je veux faire la somme de PerEQU ; CEQU ; TEQU et PEQU (PerEQU ; CEQU ; TEQU et PEQU étant des tableau à 21 entrés) en allant chercher l'entré défini par per ; c ; t et p qui sont défini plus loin.

    Mes tableau sont écrit comme cela

    Code C++ : 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
    int const CEQUILIBRE(21);
    int CEQU[CEQUILIBRE];
    CEQU[0] = 0;
    CEQU[1] = 0;
    CEQU[2] = 0;
    CEQU[3] = 0;
    CEQU[4] = 0;
    CEQU[5] = 2;
    CEQU[6] = 4;
    CEQU[7] = 8;
    CEQU[8] = 12;
    CEQU[9] = 16;
    CEQU[10] = 20;
    CEQU[11] = 22;
    CEQU[12] = 24;
    CEQU[13] = 26;
    CEQU[14] = 28;
    CEQU[15] = 30;
    CEQU[16] = 32;
    CEQU[17] = 34;
    CEQU[18] = 36;
    CEQU[19] = 38;
    CEQU[20] = 40;

    J'ai donc un ficher main cpp avec

    Code C++ : 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
    #include "tableau.h"
    un fichier tableau.h
     
    #ifndef TABLEAUX_H
    #define TABLEAUX_H
     
    #include <vector>
    #include <string>
     
    // Déclaration des tableaux avec 'extern' (sans fixer la taille ni les valeurs)
     
     
     
    extern  int const PerEQUILIBRE(21);
    extern int const CEQUILIBRE(21);
    extern int const TEQUILIBRE(21);
    extern int const PEQUILIBRE(21);

    et un fichier tableau.cpp

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "tableau.h"
    //Tableau des compétences
       // EQUILIBRE (EQU) carac utilisées Per C T P
    // Tabl pour C d'EQU CEQU
    extern  int CEQU[CEQUILIBRE];
    CEQU[0] = 0;
    CEQU[1] = 0;
    CEQU[2] = 0;
    CEQU[3] = 0;
    CEQU[4] = 0;
    #endif

    Dans main.ccp

    j'ai inclu ça :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        int PerEQU[PerEQUIKIBRE];
          int CEQU[CEQUILIBRE];
         int TEQU[TEQUILIBRE];
         int PEQU[PEQUILIBRE];

    si non il compile pas avec une erreur de "error: subscripted value is not an array, pointer, or vector"

    Quand je place simplement tout dans main.ccp ça fonctionne bien, mais ça va rapidement être le fouillis
    avec ce que j'ai écrit il me sort des valeurs type x7ff7bb75ff80. et le résultat de la somme est -1149861830 au lieu d'un chiffre entre 0 et 100
    Qu'est ce que je fait de mal ?

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 781
    Par défaut
    En dehors de fonction, il n'est pas possible d'écrire des expressions, juste des déclarations de variable avec leur initialisation:

    2 possibilités:
    - initialiser le tableau en même temps que la déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    inline constexpr int CEQU[CEQUILIBRE] {
      /*[0] = */ 0,
      /*[1] = */ 0,
      ...
      /*20 = */ 40;
    };
    - ou passer par une lambda pour transformer le tout en une seule expression. Un tableau C (ou raw array) ne pouvant être retourné, j'ai remplacé par std::array. Tu peux regarder sur cppreference pour plus d'info.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    inline constexpr auto CEQU = []{
      std::array<int, CEQUILIBRE> CEQU {};
      CEQU[0] = 0;
      ...
      CEQU[20] = 40;
    }();
    De ce que j'ai comprit, ton tableau est dans un .h, le extern ne sert donc pas. Par contre, comme tu peux le constater, j'ai ajouter inline constexpr. inline pour dire que cette variable peut se retrouver dans plusieurs .cpp (puisque que chaque .h est copier dans kes fichiers qui fait un include) et constexpr parce que c'est une expression constante déduite à la compilation. La variable CEQUILIBRE mériterait aussi d'être constexpr. C'est plus fort que const dans le sens où ce dernier empêche la modification, mais n'est pas forcément une constante à la compilation.

  3. #3
    Invité de passage
    Homme Profil pro
    Archéologue
    Inscrit en
    Août 2026
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Archéologue

    Informations forums :
    Inscription : Août 2026
    Messages : 3
    Par défaut
    Merci pour ta réponse, mais ou je m'y prend mal ou c'est pas la solution

    En fait j'ai 3 fichiers, et c'est peut être là où est le problème

    un main.cpp
    un tableau.cpp / où se trouve les tableau
    un tableau.h / où je déclare les tableau

    main.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      int EQUmax = PerEQU[per]+CEQU[c]+TEQU[t]+PEQU[p];
    tableau.cpp

    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
    #include "tableau.h"
     
    //Tableau des compétences
       // EQUILIBRE (EQU) carac utilisées Per C T P
       // Tabl pour Per d'EQU PerEQU
    int main()
    {
    int PerEQU[CEQUILIBRE];
    PerEQU[0] = 0;
    PerEQU[1] = 1;
    PerEQU[2] = 2;
    PerEQU[3] = 3;
    PerEQU[4] = 4;
    PerEQU[5] = 5;
    PerEQU[6] = 8;
    PerEQU[7] = 11;
    PerEQU[8] = 14;
    PerEQU[9] = 17;
    ...
    tableau.h

    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
    #ifndef TABLEAUX_H
    #define TABLEAUX_H
     
    #include <vector>
    #include <string>
     
    // Déclaration des tableaux avec 'extern' (sans fixer la taille ni les valeurs)
     
     
     
    inline constexpr  int const PerEQUILIBRE(21);
    inline constexpr int const CEQUILIBRE(21);
    inline constexpr int const TEQUILIBRE(21);
    inline constexpr int const PEQUILIBRE(21);
     
     
    #endif

  4. #4
    Invité de passage
    Homme Profil pro
    Archéologue
    Inscrit en
    Août 2026
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Archéologue

    Informations forums :
    Inscription : Août 2026
    Messages : 3
    Par défaut
    Salut,
    après des recherche j'ai testé la suppression du ficher tableau.cpp
    et dans le tableau.h j'écris cela

    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
    inline constexpr int const PerEQUILIBRE(21);
    inline constexpr auto PerEQU= []{
        std::array<int, PerEQUILIBRE> PerEQU {};
        PerEQU[0] = 0;
        PerEQU[1] = 1;
        PerEQU[2] = 2;
        PerEQU[3] = 3;
        PerEQU[4] = 4;
        PerEQU[5] = 5;
        PerEQU[6] = 8;
        PerEQU[7] = 11;
        PerEQU[8] = 14;
        PerEQU[9] = 17;
        PerEQU[10] = 20;
        PerEQU[11] = 22;
        PerEQU[12] = 24;
        PerEQU[13] = 26;
        PerEQU[14] = 28;
        PerEQU[15] = 30;
        PerEQU[16] = 32;
        PerEQU[17] = 34;
        PerEQU[18] = 36;
        PerEQU[19] = 38;
        PerEQU[20] = 40;
    }();
    mais il me fait l'erreur suivante :

    Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    In file included from /.../Documents/Arnaud/C++/Légendes2/Légendes2/main.cpp:12:
    /Users/...e/Documents/Arnaud/C++/Légendes2/Légendes2/tableau.h:9:1: warning: inline variables are a C++17 extension [-Wc++17-extensions]
        9 | inline constexpr int const PerEQUILIBRE(21);
          | ^
    /Users/.../Documents/Arnaud/C++/Légendes2/Légendes2/tableau.h:10:1: warning: inline variables are a C++17 extension [-Wc++17-extensions]
       10 | inline constexpr auto PerEQU = []{
          | ^
    /Users/.../Documents/Arnaud/C++/Légendes2/Légendes2/tableau.h:10:23: error: variable has incomplete type 'const void'
       10 | inline constexpr auto PerEQU = []{


    pour chaque tableau ???

  5. #5
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    774
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 96
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 774
    Par défaut
    Salut,

    Comme tu débutes, une manière accessible serait de partir sur des vecteurs, éventuellement au travers de fonctions libres pour gagner en flexibilité.
    La seule différence, c'est que tu accéderas à tes tableaux non plus avec des crochets, mais avec des parenthèses.

    Genre, S= t1(a) + t2(b) ...

    sommairement, et avec le tableau t1 en exemple, tes fichiers ressembleraient à ceux-ci

    t.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #pragma once
    int t1(const size_t);
    int t2(const size_t);
    // etc.
    t.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include "t.h"
    #include <vector>
     
    int t1(const size_t i) {
        static const std::vector<int> v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        return v.at(i); //at() lance une exception quand i est invalide.
    } 
     
    // etc.

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 781
    Par défaut
    Pour l'erreur de compilation, c'est parce que j'ai oublié le return CEQU en fin de lambda, juste avant l'accolade de fermeture. Pour les warnings, c'est parce que le compilateur que tu utilises est vieux et est configuré pour C++14 ou C++11 par défaut. Un compilateur récent est en C++20 éventuellement C++17. Sinon, il faut ajouter -std=c++17 dans les options de compilation.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/09/2014, 09h45
  2. Faire appel à un tableau : notion des sous-procédures
    Par WhiteTigerZ dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 20/08/2010, 17h07
  3. [WD12] Faire une somme en SQL sur un fichier hyperfile
    Par Xsara 167 cv dans le forum HyperFileSQL
    Réponses: 3
    Dernier message: 02/12/2008, 11h23
  4. Appel d'une fonction sur un fichier
    Par amnay dans le forum Langage
    Réponses: 16
    Dernier message: 17/10/2008, 15h21
  5. faire appel à une liste sur une autre feuille
    Par vatsyayana dans le forum Excel
    Réponses: 2
    Dernier message: 16/11/2007, 20h23

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