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 :

Compilation LINUX GCC 4.6.1 : Erreur STL


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Developpeur / Technicien support
    Inscrit en
    Février 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur / Technicien support
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 30
    Par défaut Compilation LINUX GCC 4.6.1 : Erreur STL
    Bonjour,

    Je reprend un projet au sein de ma boite qui est pour ainsi dire un ..... de programme de ..... .

    Bref j'en viens au but :

    Lors de la compilation du programme (crée sous GCC 2.95 ) un tas de message d'erreur apparait.(Je montrerais ces messages par la suite)

    J'ai donc créer un petit bout de code qui fait appel à cette libraire et en voici les premières dizaines d'erreur retournée lors de la compilation :

    Main.cpp

    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
    #include <iostream>
    #include <vector>
    using namespace std;
     
    template <typename T>
    class MyClass 
    {
        public:
            static std::vector <T> MyVector;
    };
     
    int main()
    {
       MyClass<int>::MyVector = {17};
       cout<<"Sa marche"<<endl;
     
       return 0;
    }

    Commande de compilation => g++ -c main.cpp -o prog
    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
    31
    32
    In file included from /usr/include/c++/4.6/stl_string_fwd.h:20:0,
                     from /usr/include/c++/4.6/string:18,
                     from /usr/include/c++/4.6/bits/locale_classes.h:42,
                     from /usr/include/c++/4.6/bits/ios_base.h:43,
                     from /usr/include/c++/4.6/ios:43,
                     from /usr/include/c++/4.6/ostream:40,
                     from /usr/include/c++/4.6/iostream:40,
                     from main.cpp:1:
    /usr/include/c++/4.6/char_traits.h:115:27: erreur: an explicit specialization must be preceded by 'template <>'
    /usr/include/c++/4.6/char_traits.h:140:27: erreur: an explicit specialization must be preceded by 'template <>'
    In file included from /usr/include/c++/4.6/string:22:0,
                     from /usr/include/c++/4.6/bits/locale_classes.h:42,
                     from /usr/include/c++/4.6/bits/ios_base.h:43,
                     from /usr/include/c++/4.6/ios:43,
                     from /usr/include/c++/4.6/ostream:40,
                     from /usr/include/c++/4.6/iostream:40,
                     from main.cpp:1:
    /usr/include/c++/4.6/stdexcept:26:55: erreur: expected class-name before '{' token
    In file included from /usr/include/c++/4.6/stl_algobase.h:45:0,
                     from /usr/include/c++/4.6/memory:18,
                     from /usr/include/c++/4.6/string:24,
                     from /usr/include/c++/4.6/bits/locale_classes.h:42,
                     from /usr/include/c++/4.6/bits/ios_base.h:43,
                     from /usr/include/c++/4.6/ios:43,
                     from /usr/include/c++/4.6/ostream:40,
                     from /usr/include/c++/4.6/iostream:40,
                     from main.cpp:1:
    /usr/include/c++/4.6/type_traits.h:96:28: erreur: an explicit specialization must be preceded by 'template <>'
     
    /usr/include/c++/4.6/stl_iterator.h:852:3: erreur: 'istream' does not name a type
    /usr/include/c++/4.6/stl_iterator.h:868:27: erreur: expected ')' before '&' token
    /usr/include/c++/4.6/stl_iterator.h: In member function 'void istream_iterator<_Tp, _Dist>::_M_read()':
    J'en passe et des meilleurs, d'après mes recherches il existe un problème de compatibilité entre la STL et GCC (le compilateur) depuis la version 4.5.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour et bienvenue sur le forum

    Non pas de problème particulier avec gcc, c'est une erreur dans ton code. Tu doit initialiser les variables membres static. Ajoute après ta classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template <typename T>
    std::vector<T> MyClass<T>::MyVector;
    Bonne continuation

    EDIT : voir FAQ Comment initialiser un membre static ?

  3. #3
    Membre averti
    Homme Profil pro
    Developpeur / Technicien support
    Inscrit en
    Février 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur / Technicien support
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 30
    Par défaut
    Merci pour la réponse rapide.

    La correction que tu m'as donnée ne change pas les erreurs que j'ai lors de la compilation.

    Je précise que le problème viendrait de l'appel d'un template auquel on lui passe une classe en paramètre qui n'est plus accepter sur GNU GCC.

    J'ai utilisé le compilateur GNU GCC 4.6.1 à travers un IDE Code::Blocks.

    Il me retourne les mêmes erreurs surtout ce qui m'interpelle c'est qu'il m'indique une erreur sur les fichiers de la lib :

    /usr/include/c++/4.6/char_traits.h :115:27: erreur: an explicit specialization must be preceeded by 'template <>'

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    En effet, j'avais pas fait attention, j'avais juste regardé ton code et corrigé l'erreur. Mais en voyant l'erreur que tu donnes, je réalise que tu donnes pas le bon code. En tout cas, ton code n'utilise pas la spécialisation de template (en fait non, la spécialisation template vient de la STL, le problème dans ton code est ailleurs) et ne peut pas produire ce type d'erreur

    Donc il faut que tu donnes le bon code, qui génère l'erreur donnée...

  5. #5
    Membre averti
    Homme Profil pro
    Developpeur / Technicien support
    Inscrit en
    Février 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur / Technicien support
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 30
    Par défaut
    L'erreur vise un fichier de la STL char_traits.h dont voici la ligne où l'erreur précedente nous renvoi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /usr/include/c++/4.6/char_traits.h:115:27: erreur: an explicit specialization must be preceded by 'template <>'
    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
    __STL_TEMPLATE_NULL class char_traits<char> 
      : public __char_traits_base<char, int>
    {
    public:
      static char_type to_char_type(const int_type& __c) {
        return static_cast<char_type>(static_cast<unsigned char>(__c));
      }
     
      static int_type to_int_type(const char_type& __c) {
        return static_cast<unsigned char>(__c);
      }
     
      static int compare(const char* __s1, const char* __s2, size_t __n) 
        { return memcmp(__s1, __s2, __n); }
     
      static size_t length(const char* __s) { return strlen(__s); }
     
      static void assign(char& __c1, const char& __c2) { __c1 = __c2; }
     
      static char* assign(char* __s, size_t __n, char __c)
        { memset(__s, __c, __n); return __s; }
    };

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    C'est ton code qu'il faut, pas celui de la stl. Le problème vient probablement d'une erreur de ta part et non de gcc (même si cela peut arriver, commençons déjà par le plus probable)

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

Discussions similaires

  1. Erreur de compilation avec GCC
    Par Neuromancien2 dans le forum C
    Réponses: 7
    Dernier message: 20/08/2007, 09h54
  2. compilation avec arm-linux-gcc (débutant)
    Par kh@_de_7 dans le forum Linux
    Réponses: 2
    Dernier message: 26/03/2007, 10h58
  3. [débutant]compiler avec gcc sous linux
    Par Ickou dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 10/03/2006, 17h27
  4. compilation avec gcc: erreur inhabituelle
    Par artatum dans le forum C
    Réponses: 4
    Dernier message: 12/10/2005, 17h13
  5. compilation avec gcc : erreurs bizard !!!
    Par CodeurNé dans le forum C
    Réponses: 2
    Dernier message: 23/09/2005, 18h09

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