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 :

warnings à la compilation


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 126
    Par défaut warnings à la compilation
    Bonjour.
    j'ai fait un petit programme qui est en fait un split. C'est très très basique mais c'était pour le plaisir
    Voici donc le code :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <vector>
    using namespace std;
     
    int main(int argc, char *argv[]) {
     
    	ifstream SOURCE("Fichier.txt", ios::in);
    	if(!SOURCE) {
    		cerr << "Impossible d'ouvrir le fichier !" << endl;
    		exit(1);
    	}
     
    	string s;
    	vector<string> mots;
     
    	while(getline(SOURCE, s)) {
    		bool done = false;
    		while(!done) {
    			int emplacement = s.find(" ");
    			if(emplacement == string::npos) {
    				done = true;
    			}
    			else {
    				string mot = s.substr(0, emplacement);
    				mots.push_back(mot);
    				s = s.substr(emplacement+1, s.size());
    			}
    		}
    	}
     
    	for(size_t i = 0; i < mots.size(); ++i)
    		cout << mots[i] << endl;
     
    	mots.clear();
     
    	(void) argc;
    	(void) argv;
     
    	return 0;
    }
    Mon soucis c'est qu'à la compilation j'ai ce warning :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    g++ -Wall -W -pedantic -ansi split.cpp -o split
    split.cpp: In function ‘int main(int, char**)’:
    split.cpp:22: attention : comparaison entre des expressions entières signée et non signée
    J'aimerai bien éviter de l'avoir mais ... je ne sais pas comment modifier mon code pour le plus avoir ceci

    [edit] Je viens de trouver une solution mais je ne sais pas si c'est vraiment super. J'ai modifier la ligne pour avoir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(emplacement == (int) string::npos) {
    Y a t il une meilleure solution ?

  2. #2
    Membre éprouvé Avatar de BoudBoulMan
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 100
    Par défaut
    Le compilateur t'indique que tu compares deux variables de types différents (un int et un unsigned int). La solution est donc bien de caster l'une des deux variables dans le type de l'autre variable, ce que tu as fait en mettant (int)string::npos.
    Tu aurais pu caster la variable 'emplacement' mais cela ne donne aucun avantage par rapport au cast que tu as fait.

    Je ne pense pas qu'il y ait d'autres solutions.

  3. #3
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Dans ton cas emplacement ne prends pas de valeurs négatives je suppose? Si c'est le cas alors il est préférable de le déclarer directement en unsigned int, cela t'évitera aussi le cast par la même occasion...

  4. #4
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Bonjour,

    attention, string::find et string::pos renvoient tous les deux un size_t (généralement un typedef sur unsigned int).

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Il faut juste utiliser le type correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    std::string::size_type emplacement = s.find(" ");
    if(emplacement == string::npos) {
      done = true;
    }
    ...
    MAT.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 126
    Par défaut
    Citation Envoyé par Neitsa Voir le message
    Bonjour,

    attention, string::find et string::pos renvoient tous les deux un size_t (généralement un typedef sur unsigned int).
    Citation Envoyé par Mat007 Voir le message
    Salut,

    Il faut juste utiliser le type correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    std::string::size_type emplacement = s.find(" ");
    if(emplacement == string::npos) {
      done = true;
    }
    ...
    MAT.
    Exact, il faut mettre un size_t emplacement
    Merci

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Citation Envoyé par ChipsterJulien Voir le message
    Exact, il faut mettre un size_t emplacement
    Techniquement c'est un std::string::size_type, mais bon oui en pratique derrière tout ça c'est des unsigned int.

    MAT.

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ou plutôt des size_t, non?
    (ce n'est pas forcément la même chose quand tu passes en 64 bits)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ou plutôt des size_t, non?
    Non non c'est bien des std::string::size_type, cf. par exemple http://cppreference.com/cppstring/find.html.

    MAT.

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

Discussions similaires

  1. Enlever les warnings à la compilation
    Par piotrr dans le forum Général Java
    Réponses: 3
    Dernier message: 29/10/2007, 19h02
  2. [GCC] warning de compil
    Par AcidBurn37 dans le forum C
    Réponses: 2
    Dernier message: 22/10/2007, 13h11
  3. problème de warning en compilant win32 + directx
    Par madcode dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 17/10/2006, 16h58
  4. Réponses: 8
    Dernier message: 23/08/2006, 18h40
  5. Petits warnings apres compilation sous Solaris
    Par Thordax dans le forum C++
    Réponses: 22
    Dernier message: 04/07/2006, 09h45

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