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

Normalisation C++ Discussion :

Syntaxe pointeur structure et tableau


Sujet :

Normalisation C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 10
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 20
    Points
    20
    Par défaut Syntaxe pointeur structure et tableau
    Salut,
    je voudrai que 2 tableaux pointe vers les mêmes adresses
    donc ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct sPosistion
    {   int HB=0;
        int angle=0;
        etc...
    };
     
    sPosistion Posistion[MaxX][MaxY];
    sPosistion *Vec[MaxX*MaxY]=&Posistion[MaxX][MaxY];
    et le passage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        for(i=0;i<MaxX;i++)
        {   for(j=0;j<MaxY;j++)
            {   *Vec[id]=&Posistion[i][j];
                 id++;

    ||=== Build: Debug in core2 (compiler: GNU GCC Compiler) ===|
    C:\Users\david\Dropbox\code\AGK\DLL\core2\main.cpp|38|error: array must be initialized with a brace-enclosed initializer|
    C:\Users\david\Dropbox\code\AGK\DLL\core2\main.cpp||In function 'void SetVector()'
    C:\Users\david\Dropbox\code\AGK\DLL\core2\main.cpp|55|error: no match for 'operator=' (operand types are 'sPosistion' and 'sPosistion*')|
    C:\Users\david\Dropbox\code\AGK\DLL\core2\main.cpp|27|note: candidate: constexpr sPosistion& sPosistion::operator=(const sPosistion&)|
    C:\Users\david\Dropbox\code\AGK\DLL\core2\main.cpp|27|note: no known conversion for argument 1 from 'sPosistion*' to 'const sPosistion&'|
    C:\Users\david\Dropbox\code\AGK\DLL\core2\main.cpp|27|note: candidate: constexpr sPosistion& sPosistion::operator=(sPosistion&&)|
    C:\Users\david\Dropbox\code\AGK\DLL\core2\main.cpp|27|note: no known conversion for argument 1 from 'sPosistion*' to 'sPosistion&&'|
    ||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|


    d'avance merci

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Citation Envoyé par vahanar Voir le message
    Salut,
    je voudrai que 2 tableaux pointe vers les mêmes adresses
    Tout d'abord, les tableaux contiennent, il ne pointent pas. Ce sont les pointeurs qui eux peuvent pointer.
    Et donc 2 tableaux distincts ne pourront contenir que des données distintes.

    sPosistion *Vec[MaxX*MaxY] définit un tableau de pointeurs, ça contient des pointeurs. Ça n'a absolument rien à voir avec sPosistion Posistion[MaxX][MaxY] qui est un tableau de tableaux de sPosistion.

    Par contre sPosistion (*Vec)[MaxX*MaxY] lui est bien un pointeur, et il est fait pour pointer sur un tableau de sPosistion.

    &Posistion[MaxX][MaxY] est une l'adresse invalide d'un soit disant élément du tableau, bien au delà du tableau car le dernier élément est à l'adresse &Posistion[MaxX-1][MaxY-1].

    1) En C++, on n'utilise normalement pas les tableaux dit "bruts", tels que int x[10] on a bien bien mieux, il faut une très bonne raison pour déroger à cela.
    2) En C++, on évite d'utiliser les pointeurs. On a bien mieux, les références, il faut une très bonne raison pour utiliser un pointeur plutôt qu'une référence.
    3) Tenter de "mapper" un tableau de tableaux sur un tableau simple est à ma connaissance un "undefined behavior", il ne faudrait donc pas non plus faire ça.
    Je te propose le code suivant, juste pour voir. Mais apprendre le C++ plutôt que le C est la première étape nécessaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sPosistion Posistion[MaxX][MaxY];
    auto& Vec = *reinterpret_cast<sPosistion(*)[MaxX*MaxY]>(Posistion);
    Une solution en C++ serait d'avoir un unique objet qui propose les 2 types d'interface (tableau de tableaux et tableau) qui contienne un std::array<sPosistion,MaxX*MaxY> et là finis les 3 problèmes indiqués avant.

Discussions similaires

  1. [MySQL] probleme syntaxe mysql implode et tableau
    Par lol88 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/04/2010, 11h40
  2. Pointeur sur un tableau de structures
    Par klakman dans le forum Débuter
    Réponses: 7
    Dernier message: 28/09/2009, 11h06
  3. Réponses: 8
    Dernier message: 17/09/2008, 12h11
  4. Réponses: 2
    Dernier message: 11/04/2007, 22h34
  5. Réponses: 2
    Dernier message: 21/03/2007, 10h55

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