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 :

D�claration d'un array


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Ing�nieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par d�faut D�claration d'un array
    Bonjour � tous

    Voici le code que je voudrais que l'on regarde :

    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
    #include <iostream>
    #include <tr1/array>  /// On Mac
    ///#include <array>   /// On other system
     
    class une_classe {
    public:
    		une_classe(int a, int b):_x(a),_y(b){};
    		void foo();
     
    protected:	
    		const int _x,_y;
    };
     
    void une_classe::foo(){
    	std::cout << "bla" << std::endl;
    	//std::tr1::array<int, _x> vec; // <-----------
    }
     
    int main( int argc, char* argv[] ){
     
    	std::tr1::array<int, 10> a;
    	const int N(10);
    	std::tr1::array<int, N> b;
     
    	std::cout << "Hello world!" << std::endl;
    	une_classe obj(10,10);
    	obj.foo();
     
    	return 0;
    }
    Tel quel, le code compile bien.
    Dans le main on cr�er 2 arrays puis un objet de la classe que l'on a d�finie.
    La fonction foo() ne fait qu'afficher "bla".
    Si maintenant je veux faire qqch de plus avanc� avec ma fonction foo(), admettons qu'� l'int�rieur de cette m�thode, j'ai besoin d'un array d'entier dont la taille serait l'attribut _x de mon objet.
    Je d�commente la ligne mise en �vidence dans cette fonction.
    Et l� erreur :
    array.cpp:19:23: error: non-type template argument of type 'int' is not an integral constant expression
    std::tr1::array<int, _x> vec;
    ^~
    1 error generated.
    (edit: Le curseur ^~ pointe sur _x, mais les espaces multiples ne semblent pas �tre affich�s correctement)

    J'ai essay� de rajouter un cast int-->size_t, mais visiblement il est effectu� par d�faut vu que le message d'erreur reste le m�me.
    Pourquoi est-ce que j'obtiens cette erreur?
    Comment puis-je m'en d�barrasser?
    Je pourrais certes utiliser un std::vector au lieu d'un std::tr1::array mais le parcours et l'extraction sont plus co�teux non?

    Merci de votre aide

    lg_53

  2. #2
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par d�faut
    c'est parce qu'il faut une constante � la compilation, donc une constexpr pour le constructeur.

    un vector est un tableau en interne.
    Le surcout n'est pas dans l'indexation ou le parcours, mais dans le support des fonctionnalit�s d'ajout et suppression

  3. #3
    Membre Expert

    Homme Profil pro
    Ing�nieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par d�faut
    Ah ok.
    Donc si je ne connais pas la dimension au moment de la compilation, je dois oublier les array c'est �a ?

    Je m'�tais justement tourn� vers des arrays car une fois allou� la taille de mes tableaux ne bougeront pas. Donc pas d'insertions, ni de suppressions d'�l�ments.

  4. #4
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par d�faut
    La taille d'une array est un argument de template, c'est utilis� par le compilateur pour g�n�rer la bonne classe.
    En l'occurence, array<int, 2> est une classe diff�rente de array<int, 3> et de array<double, 2>Il y aura std::dynarray (un jour), en attendant, elle existe peut-�tre dans boost, sinon, tu peux la cr�er.

    Si c'est ton choix, tu peux plonger dans la STL de ton compilateur, regarder array et vector, et cr�er ta propre classe combinaison des deux.

  5. #5
    Membre Expert

    Homme Profil pro
    Ing�nieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par d�faut
    Bon ben je vais faire avec des std::vector, je pense, �a sera plus simple.

    Citation Envoy� par leternel Voir le message
    Si c'est ton choix, tu peux plonger dans la STL de ton compilateur, regarder array et vector, et cr�er ta propre classe combinaison des deux.
    Ca, ca sera pour plus tard, quand j'aurais le temps !

    Merci de votre aide, qui fut rapide.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 5
    Dernier message: 07/05/2010, 15h34
  2. Raccourcis lors d'une d�claration d'un Array
    Par saigon dans le forum Ruby
    R�ponses: 1
    Dernier message: 28/08/2009, 08h06
  3. Re-d�claration de array of TBitmap avec SetLength
    Par Pierre de Nice dans le forum D�buter
    R�ponses: 6
    Dernier message: 06/07/2008, 08h02
  4. D�claration de type array of array of variant
    Par Drooxy dans le forum Delphi
    R�ponses: 4
    Dernier message: 14/12/2006, 19h25
  5. probleme li� � la d�claration de array
    Par eleve36 dans le forum G�n�ral JavaScript
    R�ponses: 22
    Dernier message: 09/11/2005, 17h26

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