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

Applications et environnements graphiques Discussion :

Problème avec nouvelle version de g++


Sujet :

Applications et environnements graphiques

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Points : 54
    Points
    54
    Par défaut Problème avec nouvelle version de g++
    Bonjour à toutes et à tous,

    Je programme en C++ sur openSUSE 11.1 et j'ai un problème de compilation avec les version récentes de g++. En fait mon programme compile sans message d'erreur ni warnings sur Ubuntu avec g++ version 4.0.3. Mais depuis que je suis passé sous openSUSE 11.1 avec g++ version 4.3 mon programme ne compile plus: j'ai une liste incroyable de message d'erreurs, dont voici un petit échantillon:

    g++ -o SGF SGF-v1.4.cpp -I ../Libraries/ -O3
    In file included from SGF-v1.4.cpp:45:
    ../Libraries/RandomTools.h: In member function ‘void RandomVariable::Renormalize(const RandomVariable&)’:
    ../Libraries/RandomTools.h:84: error: ‘exit’ was not declared in this scope
    ../Libraries/RandomTools.h: In member function ‘void RandomVariable::Clear()’:
    ../Libraries/RandomTools.h:96: error: ‘exit’ was not declared in this scope
    SGF-v1.4.cpp: In function ‘void Measure()’:
    SGF-v1.4.cpp:1248: error: ‘numeric_limits’ was not declared in this scope
    SGF-v1.4.cpp:1248: error: expected primary-expression before ‘double’
    SGF-v1.4.cpp:1248: error: expected ‘,’ or ‘;’ before ‘double’
    SGF-v1.4.cpp: In function ‘void CheckCommandLine(int, char**)’:
    SGF-v1.4.cpp:2213: error: ‘exit’ was not declared in this scope
    SGF-v1.4.cpp:2227: error: ‘exit’ was not declared in this scope
    SGF-v1.4.cpp:2233: warning: deprecated conversion from string constant to ‘char*’
    SGF-v1.4.cpp:2237: error: ‘exit’ was not declared in this scope
    SGF-v1.4.cpp:2240: warning: deprecated conversion from string constant to ‘char*’
    SGF-v1.4.cpp:2251: error: ‘exit’ was not declared in this scope
    SGF-v1.4.cpp:2265: error: ‘exit’ was not declared in this scope
    SGF-v1.4.cpp:2268: warning: deprecated conversion from string constant to ‘char*’
    SGF-v1.4.cpp:2279: error: ‘exit’ was not declared in this scope
    SGF-v1.4.cpp:2285: error: ‘exit’ was not declared in this scope
    SGF-v1.4.cpp:2291: error: ‘exit’ was not declared in this scope
    SGF-v1.4.cpp:2298: error: ‘exit’ was not declared in this scope
    SGF-v1.4.cpp: In static member function ‘static void OperatorString::Initialize()’:
    SGF-v1.4.cpp:2533: error: ‘exit’ was not declared in this scope
    SGF-v1.4.cpp:2541: error: ‘numeric_limits’ was not declared in this scope
    SGF-v1.4.cpp:2541: error: expected primary-expression before ‘double’
    SGF-v1.4.cpp:2541: error: expected ‘,’ or ‘;’ before ‘double’
    SGF-v1.4.cpp: In static member function ‘static void Simulation::AssignNumber()’:
    SGF-v1.4.cpp:3433: warning: deprecated conversion from string constant to ‘char*’
    SGF-v1.4.cpp:3434: warning: deprecated conversion from string constant to ‘char*’
    SGF-v1.4.cpp:3435: warning: deprecated conversion from string constant to ‘char*’
    SGF-v1.4.cpp:3436: warning: deprecated conversion from string constant to ‘char*’
    SGF-v1.4.cpp: In static member function ‘static void Parameter::ReadInput(char*)’:
    SGF-v1.4.cpp:3472: error: ‘exit’ was not declared in this scope
    SGF-v1.4.cpp:3477: error: ‘exit’ was not declared in this scope
    SGF-v1.4.cpp:3482: error: ‘exit’ was not declared in this scope
    SGF-v1.4.cpp:3488: error: ‘exit’ was not declared in this scope
    SGF-v1.4.cpp:3494: error: ‘exit’ was not declared in this scope
    SGF-v1.4.cpp:3500: error: ‘exit’ was not declared in this scope
    Notez que le compilateur n'a pas l'air d'aimer l'utilisation de la function 'exit(0)'.

    Voici les librairies standard que j'inclus:

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <iostream>
    #include <iomanip>
    #include <fstream>
    #include <cmath>
    #include <dirent.h>

    Quelqu'un sait-il se qu'il se passe?
    Merci!

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    inclure <cstdlib> ?

    PS/ sans code, on répond quand même à l'aveuglette

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    PS/ sans code, on répond quand même à l'aveuglette
    Le problème est qu'il s'agit d'un nouveau code de Monte Carlo Quantique issu de plus de 6 mois de recherches, et que le code fait 8000 lignes.

    Alors j'ai ajouté <cstdlib> (je ne sais pas ce que c'est). Le résultat est que je n'ai plus que deux types d'erreurs: Les voici:

    SGF-v1.5.cpp: In function 'void CheckCommandLine(int, char**)':
    SGF-v1.5.cpp:2231: warning: deprecated conversion from string constant to 'char*'
    SGF-v1.5.cpp: In static member function 'static void OperatorString::Initialize()':
    SGF-v1.5.cpp:2539: error: 'numeric_limits' was not declared in this scope

    La ligne 2231 est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bool Test=StringCompare(Arg,"-Input");
    Il s'agit d'un warning. Apparement le compilateur n'aime pas trop la conversion de "-Input" en pointeur de char. Comment éviter ce warning?

    La ligne 2539 quant à elle est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                double Energy=numeric_limits<double>::infinity();
    Et là ce n'est pas un warning, c'est une erreur qui empêche la compilation.

    Merci en tout cas pour la réponse, qui a permis de réduire pas mal d'erreurs.

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    La fonction exit est déclarée dans <stdlib.h> qui est un en-tête C. En C++, il faut donc inclure le fichier <cstdlib>.

    Ensuite, il s'agit d'une conversion d'une chaine de caractère constante vers char*. C'est assez moche, at à vu de nez, je dirais qu'il manque des const dans le prototype de la fonction.

    Enfin, numeric_limits est dans le namespace std, c'est donc std::numeric_limits<double>::infinity(); ou plus simple, mettre un using namespace std dans chacun de tes fichiers sources.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Points : 54
    Points
    54
    Par défaut
    On y est presque!

    Citation Envoyé par Davidbrcz Voir le message
    Enfin, numeric_limits est dans le namespace std, c'est donc std::numeric_limits<double>::infinity(); ou plus simple, mettre un using namespace std dans chacun de tes fichiers sources.
    Depuis le début j'ai la directive "using namespace std;" dans mon fichier source. Mais toujours le message d'erreur. Par contre si j'ajoute explicitement le "std::", alors le compilateur me dit que la fonction 'numeric_limits' n'est pas membre de la classe 'std':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SGF-v1.5.cpp:2539: error: 'numeric_limits' is not a member of 'std'

  6. #6
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    As tu fais un #include <limits> ?

  7. #7
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    As tu fais un #include <limits> ?
    Ok, il manquait effectivement le 'include <limits>'. Je ne savais pas, car ça marchait sans lui avec les anciennes versions de g++. Mon problème est donc entièrement résolu.

    Merci à toi!

  8. #8
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Citation Envoyé par ValyGator Voir le message
    Ok, il manquait effectivement le 'include <limits>'. Je ne savais pas, car ça marchait sans lui avec les anciennes versions de g++. Mon problème est donc entièrement résolu.

    Merci à toi!
    Les anciennes versions étaient souvent plus laxistes sur les déclarations mais le bon comportement est l'actuel.

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

Discussions similaires

  1. Problème avec nouvelle version
    Par climsoldev dans le forum IGN API Géoportail
    Réponses: 2
    Dernier message: 04/06/2014, 13h40
  2. Réponses: 2
    Dernier message: 04/01/2013, 00h51
  3. Problème avec nouvelle version de Chrome
    Par rikidi dans le forum ASP.NET
    Réponses: 2
    Dernier message: 10/02/2011, 16h32
  4. Problème avec les versions nouvelle Kettle (après 2.5)
    Par Ghenadie dans le forum kettle/PDI
    Réponses: 6
    Dernier message: 20/02/2009, 10h15

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