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 :

Passer un vector<vector<char>> en argument d'une fontion


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 45
    Par défaut Passer un vector<vector<char>> en argument d'une fontion
    Bonsoir à tous,

    Mon problème est le suivant :
    j'ai créé un vecteur de vecteur de char soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<std::vector<char>> tabCodage;
    Celui après être initialisé avec des valeurs doit passer en argument d'une fonction, cependant il me renvoie le message d'erreur suivant :

    impossible de convertir le paramètre 1 de 'std::vector<_Ty>' en 'std::vector<_Ty> *'
    1> with
    1> [
    1> _Ty=char [8]
    1> ]
    1> and
    1> [
    1> _Ty=std::vector<char>
    1> ]
    1> Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
    Dans mon Fichier.h la fonction est déclaré de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<char> codageATailleFixe( std::vector<std::vector<char>> *,std::vector<char> &);
    Et dans mon main je l'appel de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    code.codageATailleFixe(&tabCodage, tabCara);
    Pouvez vous m'aider ?

    Cordialement,

    Fyejumpy

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Déjà, juste un "tout petit détail" : pourquoi te fais tu ch...er à transmettre l'un de tes paramètres par référence et l'autre sous forme de pointeur

    D'autant plus que, dans le pire des cas, l'un pourra être modifié, mais pas l'autre et dans le meilleur des cas, aucun ne devra être modifié (ta fonction en remplicant en définitive un troisième). Dés lors, pourquoi ne pas transmettre le (les ) tableau(x) qui ne doivent pas être modifié(s) sous la forme de référence constante et celui qui doit être modifié (si tant est qu'il y en ait un) sous la forme d'une référence non constante

    PS : au passage, je ne suis vraiment pas fan des tableaux de tableaux... Ne serait-il pas intéressant de remplacer cela par un tableau de caractères et un tableau contenant des paires d'itérateurs (le premier donnant sur le premier caractères qui t'intéresse et le deuxième donnant sur le caractère qui suit directement le dernier caractère qui t'intéresse, histoire d'avoir l'équivalent aux fonctions begin et end)

    Voire, parce que cela reste tout à fait envisageable, un tableau de caractères (on ne change rien) et un tableau contenant une paire d'indice (meme chose : l'indice sur le premier caractère et l'indice sur le caractère qui suit le dernier, histoire d'avoir l'équivalent à la fonction size() )

    Et bien sur, j'ai écarté d'office -- mais ai-je eu raison de le faire -- ce qui serait sans doute la solution la plus simple : un tableau de... std::string...
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 45
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Salut,

    Déjà, juste un "tout petit détail" : pourquoi te fais tu ch...er à transmettre l'un de tes paramètres par référence et l'autre sous forme de pointeur

    D'autant plus que, dans le pire des cas, l'un pourra être modifié, mais pas l'autre et dans le meilleur des cas, aucun ne devra être modifié (ta fonction en remplicant en définitive un troisième). Dés lors, pourquoi ne pas transmettre le (les ) tableau(x) qui ne doivent pas être modifié(s) sous la forme de référence constante et celui qui doit être modifié (si tant est qu'il y en ait un) sous la forme d'une référence non constante

    PS : au passage, je ne suis vraiment pas fan des tableaux de tableaux... Ne serait-il pas intéressant de remplacer cela par un tableau de caractères et un tableau contenant des paires d'itérateurs (le premier donnant sur le premier caractères qui t'intéresse et le deuxième donnant sur le caractère qui suit directement le dernier caractère qui t'intéresse, histoire d'avoir l'équivalent aux fonctions begin et end)

    Voire, parce que cela reste tout à fait envisageable, un tableau de caractères (on ne change rien) et un tableau contenant une paire d'indice (meme chose : l'indice sur le premier caractère et l'indice sur le caractère qui suit le dernier, histoire d'avoir l'équivalent à la fonction size() )

    Et bien sur, j'ai écarté d'office -- mais ai-je eu raison de le faire -- ce qui serait sans doute la solution la plus simple : un tableau de... std::string...

    bah enfaîte c'est un sujet de TP, pour une matière qui est de la compression et de la cryptographie. notre prof nous demande de créer une table de codage c'est à dire une table qui associe des caractères avec leur code binaire d'où l'utilisation d'un vecteur de deux dimensions en char.

    Du coup j'ai préféré utilisé un tableau de tableau, mais oui c'est pas le meilleur des choix...

    Donc voici avec les changements :

    Fichier.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector<char> CTF::codageATailleFixe(const vector<vector<char>> & tabCod,const  vector<char> &  tabCara)
    Fichier.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<char> codageATailleFixe(const std::vector<std::vector <char>> &,const std::vector<char> &);
    L'erreur n'apparait plus par contre maintenant je suis en out of range ^^.

    Je vais essayer de régler ça !

    merci d'avoir répondu.

    Cordialement,

    Fyejumpy

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Ben, un out of range, c'est facile : tu utilises (de toutes évidences) un accès à base de at(), ce qui n'est déjà pas bien du tout (je t'explique au besoin pourquoi je dis cela) mais, le gros problème, c'est que tu fais surement un peu de semoule au niveau de tes indexes : il faut pas essayer d'aller plus loin que tab.size()

    Je t'ai indiqué la cause, mais, si tu veux qu'on trouve la ligne où l'erreur survient, il faudra surement plus de code

    PS :En fait, la fonction at() n'aurait jamais du voir le jour... Mais bon, elle est là, et on trouve un max d'imbéciles (sans offence, n'est-ce pas ) pour décider de l'utiliser
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 45
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Ben, un out of range, c'est facile : tu utilises (de toutes évidences) un accès à base de at(), ce qui n'est déjà pas bien du tout (je t'explique au besoin pourquoi je dis cela) mais, le gros problème, c'est que tu fais surement un peu de semoule au niveau de tes indexes : il faut pas essayer d'aller plus loin que tab.size()

    Je t'ai indiqué la cause, mais, si tu veux qu'on trouve la ligne où l'erreur survient, il faudra surement plus de code

    PS :En fait, la fonction at() n'aurait jamais du voir le jour... Mais bon, elle est là, et on trouve un max d'imbéciles (sans offence, n'est-ce pas ) pour décider de l'utiliser
    Franchement merci tu m'as vraiment aidé ! Tout mes problèmes sont résolus grâce à toi ! J'ai juste resize mon vecteur par rapport au vecteur passé en paramètre et hop plus de out of range ! je ne l'avais pas initialisé ... Donc tout est bon

    Je passe le sujet en résolu !

    Cordialement,
    Fyejumpy

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

Discussions similaires

  1. Vecteur de vecteur de vecteur ?
    Par oodini dans le forum C++
    Réponses: 22
    Dernier message: 03/10/2011, 13h12
  2. Réponses: 1
    Dernier message: 01/04/2010, 14h49
  3. Vecteurs de vecteurs de vecteurs
    Par El Charpi dans le forum C++
    Réponses: 4
    Dernier message: 11/01/2010, 21h29
  4. passer un char** en argument
    Par ben_popcorn dans le forum C
    Réponses: 11
    Dernier message: 26/03/2006, 21h57
  5. Vecteurs de vecteurs ?
    Par Edouard Kaiser dans le forum C++
    Réponses: 16
    Dernier message: 02/05/2005, 14h39

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