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 :

STL Questions basiques


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 11
    Par défaut STL Questions basiques
    Bonjour,

    Je suis entrain de lire un tutorial sur STL C++(télécharger sur le site).

    http://www.developpez.biz/download/stl.pdf

    Je vous soumets des passages que je n'ai pas saisis :

    L’utilisation de clauses type #ifdef permet néanmoins d’utiliser la STL sur les
    compilateurs non pourvus du support des espaces de nommage.
    En quoi l'utilisation de #ifdef permet d'utilser la STL sur ces compilateurs?



    Si les fonctionnalités présentes dans la STL sont normalisées, toute la partie
    implémentation est laissée libre. Par exemple, le nom des fichiers d’entête peut
    légèrement varier d’une implémentation à l’autre, rendant nécessaire l’utilisation de clauses #ifdef. Toutefois, les différences sont toujours mineures et n’entraînent que
    très peu de modifications du code source
    .
    Même question concernant l'utilisation de #ifdef.


    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
    On peut ajouter un using namespace std;, ce genre de choses.

    C'est vrai que là
    En fait, le nom des en-têtes est fixe, en revanche qui inclus qui est laissé à la discrétion des implémentateurs de compilateur.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    Le nom des fichiers d'entete est fixe, leur contenu minimal l'est aussi, mais les implementeurs de la SL peuvent y rajouter des choses.

    Je pense que le document, ecrit peu de temps apres la standardisation du C++, prend en compte le fait que les implementeurs n'avaient pas tous une SL standard. Mais je ne vois pas non plus quelle peut etre sa solution a base de #ifdef.

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Un truc du genre, pour les namespaces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #ifdef JE_SUIS_UN_COMPILO_QUI_COMPREND_LES_NAMESPACES
    namespace std {
    #endif
    // Le code
    #ifdef JE_SUIS_UN_COMPILO_QUI_COMPREND_LES_NAMESPACES
    }
    #endif
    Pour les includes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #ifdef JE_SUIS_UN_COMPILO_QUI_IMPLEMENTE_UNIQUEMENT_UNE_PRE_VERSION_DE_LA_STL
    #include <vector.H> // ou autre, que sais-je
    #else
    #include <vector>
    #endif
    De nos jours, ces considérations sont devenues caduques, à moins que tu travailles avec un compilateur vraiment vieux.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 11
    Par défaut Utilisation de vector et iterator
    Je veux vous remercier tous de vos réponses,ils m'ont vraiment soualgé avec code à l'appui !! .
    Je continue à travailler avec vous donc sur le même document pour m'intitier à une utilisation plus avancée de la STL pour favoriser l'esprit "reuse" dans mes programmes.


    Je vous propose ce code cité çi-dessous dans le même manuel:
    [url=" http://www.developpez.biz/download/stl.pdf "], que j'ai compilé et qui a donné des erreurs à la compilation concernant la declaration d'un objet vector


    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
    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main()
    {	
    	int tab[10]={0,1,2,3,4,5,6,7,8,9};
    	int*p;
    	
           
    	// declaration genere une erreur de compilation
            vector<int> tab(10); 
    	
           
             //Iterateurs sur vecteur 
            for (vector<int>::iterator p=tab.begin();p<tab.end();p++)
    	cout << *p << " "<< endl;
    }

    Donc je me suis dit que le compilateur voit que tab est un pointeur sur tableau d'entier et refuse de transtyper le tableau en vecteur?
    Est-ce que c'est cela l'origine de l'erreur ?

    Notez que cette erreur de declaration (suivant le compilateur) genere deux erreurs sur la ligne suivante au niveau de begin et end qui refuse le pointeur tab


    J'ai corrigé donc le code par cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vector<int> tabp(10);

    Merci à vous tous

  6. #6
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Si tu déclares des variables de même nom dans la même portée, forcément le compilo ne va pas être content. Il faut bien que tes 2 tableaux et itérateurs portent tous un nom différent.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 11
    Par défaut
    Je vous remercie infiniment pour votre eclairage

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

Discussions similaires

  1. Question Basique Gestion Erreur VBA ...
    Par Le_Phasme dans le forum Access
    Réponses: 2
    Dernier message: 11/10/2005, 13h42
  2. Question basique
    Par PatLeOuf dans le forum C++
    Réponses: 1
    Dernier message: 23/03/2005, 10h57
  3. Réponses: 5
    Dernier message: 04/03/2005, 12h14
  4. [debutant STL] question sur les vectors
    Par killerjeff dans le forum SL & STL
    Réponses: 13
    Dernier message: 19/08/2004, 17h32

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