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

SL & STL C++ Discussion :

vector<bool> comme argument de fonction


Sujet :

SL & STL C++

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Points : 97
    Points
    97
    Par défaut vector<bool> comme argument de fonction
    Bonjour à tous,
    J'ai déclaré dans une tête de classe (CLogic.h)la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int GetFlag(vector<bool> aFlag, int Token);
    Ensuite dans CLogic.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int GetFlag(vector<bool> aFlag, int Token)
    {
    return aFlag[Token];
    }
    et voila ce qui m'arrive à la compilation:
    Logic.cpp
    c:\...\echecetmat\logic.h(30) : error C2061: syntax error : identifier 'vector'
    c:\...\echecetmat\logic.cpp(45) : error C2511: 'GetFlag' : overloaded member function 'int (class std::vector<bool,class std::allocator<bool> >,int)' not found in 'CLogic'
    c:\...\echecetmat\logic.h(20) : see declaration of 'CLogic'
    J'ai également déclaré:
    dans CLogic.h,
    et dans CLogic.cpp
    Qu'est ce qui ne va pas?
    Merci.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    vector est déclaré dans le namespace std. Il faut soit :
    - utiliser std::vector à la place de vector
    - mettre après avoir inclu <vector>
    using namespace std;

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Points : 97
    Points
    97
    Par défaut
    Merci! Ca Marche!!!
    En fait il ya encore quelque chose qui me tracasse.
    J'avais déja essayer d'ajouter "namespace std" mais avant <vector>.
    Comment ce fait il qu'il faille déclarer <vector> alors qu'on n'a pas encore spécifié l'espace de nom qui va avec?
    Ce ne serait pas plus logique dans l'autre sens?

  4. #4
    Membre averti
    Avatar de rolkA
    Inscrit en
    Juillet 2003
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 324
    Points : 369
    Points
    369
    Par défaut
    En fait, l'espace de nom est défini lors du #include <vector>
    Ensuite, le using namespace std te permet d'utiliser les identificateurs situé dans l'espace de noms std sans avoir à spécifier leur nom complet (par exemple, donc, vector au lieu de std::vector).
    C pareil pour cout, soit tu écris std::cout, soit tu fais un using namespace std une fois pour toutes et tu utilises cout
    Un historique local pour Visual Studio 2005 et 2008 :
    http://www.codeplex.com/VLH2005

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Et il est déconseillé (dans un vrai programme) de charger un espace de noms alors que nous sommes dans un fichier d'entêtes.

    Sinon,
    - attention les vecteurs de booléens ne sont pas des "vrais" conteneurs façon STL
    - tu ferais mieux de recevoir ton vecteur par référence constante. Pourquoi les copier ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Luc Hermitte
    - attention les vecteurs de booléens ne sont pas des "vrai" conteneurs façon STL
    Peux-tu détailler stp ?

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Je vais paraphraser, ou plutôt résumer un point d'Effective STL, le temps de le retrouver.
    Voilà.
    Certaines propriétés types des containers ne sont plus vérifiées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vector<bool> v;
    bool * pb = &v[0];
    ne compilera pas.

    Accessoirement, il ne contient pas des booléens.

    Il s'agirait en fait d'une expérience.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  8. #8
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Points : 97
    Points
    97
    Par défaut
    Bonjour!
    Désoler de répondre aussi tard, je n'etais pas chez moi.
    Merci encore pour les explications sur l'espace de nom.
    Par contre, les commentaires qui suivent sont un peu costauds.
    Si j'ai bien compris (ce qui n'est pas sur du tout..),
    1/je ferais mieux de déclarer dans CLogic.cpp sans quoi certaines propriétés du conteneur ne sont plus valables...
    2/d'ecrire ma fonction comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int GetFlag(vector<bool>& aFlag, int Token);
    pour éviter de me prendre les pieds dans le tapis avec les problemes du tas.
    PS:Sans trop rentrer dans les détails, comment ce fait-il que 1/ soit nécessaire pour le bon déroulement de la suite?

  9. #9
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    1/ Si tu as besoin de déclarer un truc qui repose sur des vecteurs : genre un champ vecteur dans ta classe, alors il faut l'inclure <vector> dans le fichier d'en-têtes où est déclarée la classe.
    Oublie pour l'instant ce dont j'ai parlé au sujet de pas un vrai conteneur -- du moins n'écrit pas &v[k] avec des vecteurs de booléens.

    2/ A priori, tu devrais pouvoir prendre ton vecteur par référence constante. Mais quel est l'intérêt de cette fonction verbeuse qui ne fait que renvoyer aFlag[token] ? Si le vecteur était une donnée membre je comprendrais, mais cela ne semble pas être le cas ici.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  10. #10
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Points : 97
    Points
    97
    Par défaut
    Bonsoir,
    En fait j'essaie d'écrire un programme de jeu d'echecs et mon conteneur vector permettrait, lorsqu'il faut établir la liste des coups possibles, de vérifier si petit roque ou grand roque ou encore si une prise en passant etc... est possible.
    Chaque élément du Flag passe donc de 1 à 0 et vis versa en fonction de la position courrante.
    Crois tu que l'on puisse vraiement donné l'atribut de constant au vecteur?

  11. #11
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Oui, la fonction ne le modifie pas.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  12. #12
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Points : 97
    Points
    97
    Par défaut
    Merci encore et bientôt peut être pour un futur probleme .(Ce qui ne serait tarder....)

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

Discussions similaires

  1. Passer comme argument une fonction paramétrée
    Par spikeespk dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/02/2008, 15h06
  2. Réponses: 10
    Dernier message: 26/01/2008, 00h09
  3. Réponses: 6
    Dernier message: 06/04/2007, 21h20
  4. Passer une fonction comme argument à une fonction
    Par Cocotier974 dans le forum Général Python
    Réponses: 4
    Dernier message: 29/06/2004, 13h41

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