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

Langage C++ Discussion :

Tableau static, sizeof et taille déterminée à la compilation


Sujet :

Langage C++

  1. #61
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    @Lolilolight :
    Lorsque Médinoc dit que cela ne peut pas être utilisé dans un switch/template ou autre, c'est dans le cas où, votre template/switch n'est pas dans le même fichier que là, où vous déterminez Test::size.
    On en revient aux problème d'édition de lien, d'unité de compilation et les problèmes auxquels j'avais fait face, en page une.

    Au final, vous êtes revenu, en page 3, à la solution que j'ai proposé en page une et pour laquelle, je n'arrivais pas à saisir pourquoi cela marchait. En effet, mon premier test était un test minimaliste où j'avais tout mis dans la même unité de compilation et donc, que j'avais aucune soucis de disponibilité des variables. Mais, les soucis reviennent, lorsque vous voulez utiliser sizeof(Test::tableau) dans plusieurs autres fichiers.

    De plus, il faut faire attention à ne pas mettre dans le .h les initialisations, sinon, elles sont compilés plusieurs fois (dans chaque .o d'un .c utilisant le .h en question). C'est une erreur pourtant classique dû à la séparation de la compilation des différent .c.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  2. #62
    Invité
    Invité(e)
    Par défaut
    Pourquoi est ce que tu voudrais mettre le sizeof dans plusieurs fichiers ?
    Même le c++11 ne fait pas ça.

    Ca, c'est à éviter à tout prit!
    Le sizeof doit se faire uniquement là ou tu déclare ton tableau, sinon, ça ne renverra pas la bonne taille ou pire, ça ne compilera pas.

    Car le pointeur sur le tableau ne contient que l'adresse du 1er élément du tableau, pas tout le tableau, la seule solution est de sauvegarder la taille tu tableau dans une variable lors de l'initialisation du tableau.

    Ou alors tu fait une liste chaînée et un itérateur comme la classe std::vector pour compter le nombres d'éléments dans ton tableau en initialisant cette liste à partir d'un tableau.

    De plus tu ne peux pas faire une fonction qui retourne un tableau en c++, t'es oubligé de convertir le tableau en un pointeur.

  3. #63
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Tu as perdu.
    Plusieurs solutions ont été proposées.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  4. #64
    Invité
    Invité(e)
    Par défaut
    Oui, avec boost. (M'enfin bon passer par une librairie externe pour faire se genre de chose ou même une solution sans utilisé boost je trouve ça très moyen)

  5. #65
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Le coup du sizeof, dans chaque fichier était inévitablement une erreur et même, la grande erreur, mais sur le coup, je n'avais pas du tout compris ce que le compilateur me disais.
    Le sizeof doit se faire uniquement là ou tu déclare ton tableau, sinon, ça ne renverra pas la bonne taille ou pire, ça ne compilera pas.
    Ça ne compilera simplement pas.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #66
    Invité
    Invité(e)
    Par défaut
    Ok dis comme ça, je comprend mieux.

  7. #67
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Le coup du sizeof, dans chaque fichier était inévitablement une erreur et même, la grande erreur, mais sur le coup, je n'avais pas du tout compris ce que le compilateur me disais.

    Ça ne compilera simplement pas.
    Et d'ailleurs, pour la postérité, il te disait quoi, exactement?

    Parce que si un jour on tombe sur la même chose, on saura
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  8. #68
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Il me disait
    error: invalid application of ‘sizeof’ to incomplete type ‘const char* []’
    Comme quoi, il ne peut pas appliquer de sizeof sur le type que je viens de lui passer (car celui est incomplet).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #69
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Effectivement, ce n'est pas clair.
    Je n'avais jamais réalisé que T [] n'est pas un type complet sans la taille.

    Bonne continuation!
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  10. #70
    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
    Je sais pas si ça a été proposé, mais dans un tel cas, solution extrême : un define et un static_assert !
    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.

+ Répondre à la discussion
Cette discussion est résolue.
Page 4 sur 4 PremièrePremière 1234

Discussions similaires

  1. Tableau static
    Par raynox dans le forum C++
    Réponses: 15
    Dernier message: 27/04/2006, 08h22
  2. [Débutant(e)][embarqué] Base de données vs tableau static
    Par ludonantes dans le forum Collection et Stream
    Réponses: 16
    Dernier message: 15/02/2006, 20h42
  3. ouvrir une nouvelle fenêtre dans une taille déterminé
    Par lnikolanta dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/09/2005, 15h26
  4. [Tableau]comment connaitre la taille d'un tableau à 2 dimensions
    Par Kyti dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 22/04/2005, 10h27
  5. static const et taille de tableau
    Par tut dans le forum C++
    Réponses: 3
    Dernier message: 27/01/2005, 16h01

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