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 :

tableau dynamique de tableaux statiques.


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 164
    Points : 227
    Points
    227
    Par défaut tableau dynamique de tableaux statiques.
    Bonjour,

    J'aimerais faire un tableau (avec vector) de tableau de 3 doubles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <vector>
    using namespace std;
     
    vector<double[3]> vertex;
    double d[3] = {0.0, 0.0, 0.0};
    vertex.push_back(d);
    Seulement voila quand je compile le compilateur devient très bavard :
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:606: instantiated from ‘void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = double [3], _Alloc = std::allocator<double [3]>]’
    /home/raphastronome/prg/tests/oulines/objet.cpp:15: instantiated from here
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/ext/new_allocator.h:104: error: ISO C++ forbids initialization in array new
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:610: instantiated from ‘void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = double [3], _Alloc = std::allocator<double [3]>]’
    /home/raphastronome/prg/tests/oulines/objet.cpp:15: instantiated from here
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/vector.tcc:256: error: cannot convert ‘const double [3]’ to ‘double [3]’ in initialization
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:610: instantiated from ‘void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = double [3], _Alloc = std::allocator<double [3]>]’
    /home/raphastronome/prg/tests/oulines/objet.cpp:15: instantiated from here
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/vector.tcc:260: error: ISO C++ forbids assignment of arrays
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_algobase.h:443: instantiated from ‘_BI2 std::__copy_backward_aux(_BI1, _BI1, _BI2) [with _BI1 = double (*)[3], _BI2 = double (*)[3]]’
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_algobase.h:482: instantiated from ‘static _BI2 std::__copy_backward_normal<true, true>::copy_b_n(_BI1, _BI1, _BI2) [with _BI1 = __gnu_cxx::__normal_iterator<double (*)[3], std::vector<double [3], std::allocator<double [3]> > >, _BI2 = __gnu_cxx::__normal_iterator<double (*)[3], std::vector<double [3], std::allocator<double [3]> > >]’
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_algobase.h:517: instantiated from ‘_BI2 std::copy_backward(_BI1, _BI1, _BI2) [with _BI1 = __gnu_cxx::__normal_iterator<double (*)[3], std::vector<double [3], std::allocator<double [3]> > >, _BI2 = __gnu_cxx::__normal_iterator<double (*)[3], std::vector<double [3], std::allocator<double [3]> > >]’
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/vector.tcc:257: instantiated from ‘void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = double [3], _Alloc = std::allocator<double [3]>]’
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:610: instantiated from ‘void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = double [3], _Alloc = std::allocator<double [3]>]’
    /home/raphastronome/prg/tests/oulines/objet.cpp:15: instantiated from here
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_algobase.h:412: error: ISO C++ forbids assignment of arrays
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_uninitialized.h:86: instantiated from ‘_ForwardIterator std::__uninitialized_copy_aux(_InputIterator, _InputIterator, _ForwardIterator, __false_type) [with _InputIterator = __gnu_cxx::__normal_iterator<double (*)[3], std::vector<double [3], std::allocator<double [3]> > >, _ForwardIterator = __gnu_cxx::__normal_iterator<double (*)[3], std::vector<double [3], std::allocator<double [3]> > >]’
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_uninitialized.h:113: instantiated from ‘_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator<double (*)[3], std::vector<double [3], std::allocator<double [3]> > >, _ForwardIterator = __gnu_cxx::__normal_iterator<double (*)[3], std::vector<double [3], std::allocator<double [3]> > >]’
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_uninitialized.h:254: instantiated from ‘_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>) [with _InputIterator = __gnu_cxx::__normal_iterator<double (*)[3], std::vector<double [3], std::allocator<double [3]> > >, _ForwardIterator = __gnu_cxx::__normal_iterator<double (*)[3], std::vector<double [3], std::allocator<double [3]> > >, _Tp = double [3]]’
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/vector.tcc:279: instantiated from ‘void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = double [3], _Alloc = std::allocator<double [3]>]’
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:610: instantiated from ‘void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = double [3], _Alloc = std::allocator<double [3]>]’
    /home/raphastronome/prg/tests/oulines/objet.cpp:15: instantiated from here
    /usr/lib/gcc/x86_64-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_construct.h:81: error: ISO C++ forbids initialization in array new
    :: === Build finished: 23 errors, 0 warnings ===
    Je n'ai pas trouvé grand chose à propos des tableaux dynamiques de tableaux statiques.
    J'aimerais éviter d'utiliser les pointeurs si possible.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu ne peux pas stocker un tel tableau directement dans un conteneur. Par contre tu peux utiliser une structure qui contient un tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct Tableau
    {
        double V[3];
    };
     
    Tableau T = {0.f, 0.f, 0.f};
     
    std::vector<Tableau> vertex;
    vertex.push_back(T);

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Il y a un certain nombre de pré-requis pour utiliser un type avec std::vector.
    En particulier, il doit être CopyConstructible et Assignable.
    Ce n'est pas le cas des tableaux.
    Boost ftw

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

Discussions similaires

  1. tableau dynamique de tableaux statiques?
    Par spin6 dans le forum Débuter
    Réponses: 1
    Dernier message: 14/12/2008, 19h47
  2. Pourquoi tableau dynamique et pas statique
    Par Topeur dans le forum Débuter
    Réponses: 1
    Dernier message: 04/04/2008, 12h12
  3. [Tableaux] Tableau dynamique avec php
    Par Ricus28 dans le forum Langage
    Réponses: 3
    Dernier message: 01/08/2006, 22h46
  4. Réponses: 1
    Dernier message: 23/06/2006, 11h19
  5. [Tableaux] Tableau dynamique
    Par albo69 dans le forum Langage
    Réponses: 8
    Dernier message: 20/04/2006, 20h58

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