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 static


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Par défaut Tableau static
    Bonjour,

    Donc je souhaiterai creer un tableau static mais ca taille je la rentre au moment de l'appel de la fonction Initializer(int taille) de la classe :

    ex :
    nomclass *cl = nomclass();
    cl.Intializer(10);

    donc je sais qu'il faut faire

    static int tableau[taille]

    Mais comme je connais pas encore ca taille lorsque je déclare la ligne ci-dessus. Donc je pense que la seule solution est de le faire en dynamique (à moins que vous saviez comment on le fait normalement.

    Donc je fais :

    static int *tableau;

    puis dans la procedure Intializer(int ) je fais : tableau = new int[]

    Mais bon ca marche pas, faut que je met la precedure en static aussi?

    Bref je pense qu'un petit exemple serait bien venu, car j'ai pas trouvé.

    Merci

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Pourquoi pas un vecteur statique ?

  3. #3
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Donc je pense que la seule solution est de le faire en dynamique
    En effet, si c'est au moment de l'éxécution il n'y a pas le choix.
    A moins de faire un tableau static assez grand mais:
    -risque d'utiliser trop de mémoire pour rien,
    -vérifier la taille demandée par l'utilisateur pour éviter les débordements.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Par défaut
    Citation Envoyé par Miles
    Pourquoi pas un vecteur statique ?
    Je vois pas c'est quoi un vecteur statique??

    Citation Envoyé par seriousme
    En effet, si c'est au moment de l'éxécution il n'y a pas le choix.
    A moins de faire un tableau static assez grand mais:
    -risque d'utiliser trop de mémoire pour rien,
    -vérifier la taille demandée par l'utilisateur pour éviter les débordements.
    La taille serait de taille 20 maximum. Donc je pense pas que ca poserait des problemes. Mais je parviens pas à faire un tableau static lors de l'execution car le tableau static se déclare en dehors du main

    Merci

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Par défaut
    Mais je vois pas la difference d'une tableau static et d'un vecteur?

    DOnc je dois déclarer comme ceci :

    const static vector <int> tableau;

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Je vois pas c'est quoi un vecteur statique??
    La classe "vector" implémente des tableaux dynamiques bien meilleurs que les tableaux traditionnels:
    http://c.developpez.com/faq/cpp/?page=STL#STL_vector

  7. #7
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    const static vector <int> tableau;
    Ca ne peut pas être "const" car le tableau est remplie à l'exécution.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Par défaut
    Ah si j'ai bien compri c'est un tableau qui permet d'être utilisé aussi plus facilement via des fonctions prédefinie comme resize. Mais bon en performance ca ne serait pas un peu plus lent? Car le seul souci que j'ai c'est de déclarer un tableau avec une taille que je passe en argument d'une fonction et le mettre en static.

    Mais bon si c'est la seule solution je suis preneur alors du vecteur ^^

    Merci

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Par défaut
    Donc j'ai essayé, j'ai crée le vecteur sans souci soit :

    private:
    static vector <int> *num

    Donc un pointeur d'entier en vecteur

    puis dans une procedure de la classe j'initialise le tableau a NULL soit :
    num.resize(10);
    fill(num.begin(),num.end(),NULL)

    Mais bon ca va pas.

    A la vitesse que j'avance j'aurai jamais fini, je dois rendre un solver de sudoku dans meme pas une semaine :-(

    Merci

  10. #10
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Pourquoi utiliser un pointeur de vecteur<int>. Tu peux utiliser un vecteur<int> tout simplement. En plus vu comment tu t'en sert aprés ça ne risquait pas fonctionner.

    Si tu veux faire un vecteur de pointeur d'entier, tu peux faire vector<int *>, mais bon attention à ne pas utiliser les pointeurs pour rien.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Par défaut
    Ok j'ai fais les modifications mais j'ai toujours une erreur a partir du resize

    /tmp/ccDw4xhZ.o: dans la fonction "ManageList::Initializer(int)":
    prog.cc.text+0xd8): référence indéfinie vers "ManageList::num"
    collect2: ld a retourné 1 code d'état d'exécution
    A mon avis il arrive pas a accédé à l'objet, donc j'ai fais this.num comme c'est en static mais ca marche toujours pas

    Ben j'utilise des vecteurs comme on m'a dit qu'avec des tableaux pour déclarer .... il vaut mieu utiliser des vecteurs. Ensuite, comme je voulais faire un tableau de int de pointeur (pour le test apres ca sera pas des int mais des objets ManageList) puis les pointeurs me permettent de ranger par pertinance les cases (via les listes).

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Par défaut
    J'ai pas de probleme pour resize quand je met pas le vector en static mais bon comme il doit être en static faut que je trouve puis fill me met des erreurs incompréhensible

    Alle une soirée de moins il me reste 4 jours pour le finir pff

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Par défaut
    Donc après avoir cherché en vain, j'ai eu un déclique et je me suis rappelé qu'une var static meme à l'interieur de la classe on l'appel par nomclass::var

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Par défaut
    Ok, tout va niquel sauf un truc :

    quand je fais fill(ManageList::num.begin(), ManageList::num.end(),NULL);

    Ca ne fonctionne pas

    mais si je fais par exemple :
    ManageList::num[0] = NULL

    Ca fonctionne

    Donc suis-je obligé de faire une boucle pour initialiser?

    Merci

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Par défaut
    Bref, quand j'y pense on fait comment pour déclarer un tableau dynamique static en déclarant ca taille dans le constructeur.

    Par exemple pour une classe "CLASS" :

    Public:
    static type *var;
    Dans le constructeur (Cette ligne me met des erreurs) :
    CLASS::var = new type[taille];
    puis je déclare en dehors de la classe :
    type *CLASS::var;
    Un grand merci, je veux juste savoir comment resoudre cette erreur

  16. #16
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Tu sais, si tu veux qu'on t'aide, va falloir être plus explicite avec ton code et les erreurs.

    Un constructeur ne devrait jamais initialiser une variable statique.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/02/2013, 12h24
  2. Positionnement dans un double tableau static
    Par l'unique dans le forum Débuter
    Réponses: 2
    Dernier message: 25/04/2011, 21h24
  3. Tableau static dans une dll VC++ ?
    Par lio33 dans le forum MFC
    Réponses: 2
    Dernier message: 11/07/2007, 10h50
  4. Réponses: 1
    Dernier message: 23/09/2006, 00h41
  5. [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

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