Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Membre actif Avatar de stc074
    Homme Profil pro Pierre-jean
    Codeur du dimanche
    Inscrit en
    janvier 2009
    Messages
    670
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre-jean
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : janvier 2009
    Messages : 670
    Points : 194
    Points
    194

    Par défaut <regex> trouver un motif

    Bonjour, je débute, j'ai fait une fonction pour saisir un entier, comme ça passe par un string j'ai décidé d'utiliser les regex pour voir si la chaine saisie n'est composée que de chiffre.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <regex>
     
    [...]
     
    void Connection::initPort() {
    	string strPort="";
    	regex rx("#[0-9]{1,5}#");
    	do {
    		cout << "Port actuel : " << port << ". Saisissez un nouveau numero de port : " << endl << ">>";
    		getline(cin, strPort);
    	} while(!regex_match(strPort, rx));
    }
    Eclipse me met comme erreurs soulignés en rouge (regex rx.. ->expected ";" before rx) et regex_match ... ->regex_match’ was not declared in this scope

    j'inclus pourtant bien <regex>
    Ce doit etre une erreur de débutant peut etre que ça parlera à certains d'entre vous.
    Merci pour votre aide précieuse.

  2. #2
    Expert Confirmé Sénior

    Homme Profil pro Pierre
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    2 117
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 2 117
    Points : 4 501
    Points
    4 501

    Par défaut

    à tous les coups, c'est un certain std:: qui manque.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • La plus sotte des questions est celle qu'on ne pose pas.

    Pour faire des graphes, essayez yEd.

  3. #3
    Membre actif Avatar de stc074
    Homme Profil pro Pierre-jean
    Codeur du dimanche
    Inscrit en
    janvier 2009
    Messages
    670
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre-jean
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : janvier 2009
    Messages : 670
    Points : 194
    Points
    194

    Par défaut

    Citation Envoyé par leternel Voir le message
    à tous les coups, c'est un certain std:: qui manque.
    J'ai mis un using namespace std; sinon meme avec un ajout de std:: ça ne marche toujours pas.

  4. #4
    Expert Confirmé Sénior

    Homme Profil pro Pierre
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    2 117
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 2 117
    Points : 4 501
    Points
    4 501

    Par défaut

    Essaie de compiler ce code-ci.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <regex>
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    int main() {
    	string port="8080";
    	string strPort;
    	regex rx("#[0-9]{1,5}#");
    	do {
    		cout << "Port actuel : " << port << ". Saisissez un nouveau numero de port : " << endl << ">>";
    		getline(cin, strPort);
    	} while(!regex_match(strPort, rx));
    	port = strPort;
    	cout << "OK : " << port << endl;
    	return 0;
    }
    S'il compile, tu as une erreur dans tes includes, ou une interférence de namespace

    S'il ne compile pas, ton Eclipse est mal configuré, et/ou ne supporte pas (une partie de) C++11
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • La plus sotte des questions est celle qu'on ne pose pas.

    Pour faire des graphes, essayez yEd.

  5. #5
    Membre actif Avatar de stc074
    Homme Profil pro Pierre-jean
    Codeur du dimanche
    Inscrit en
    janvier 2009
    Messages
    670
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre-jean
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : janvier 2009
    Messages : 670
    Points : 194
    Points
    194

    Par défaut

    Citation Envoyé par leternel Voir le message
    Essaie de compiler ce code-ci.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <regex>
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    int main() {
    	string port="8080";
    	string strPort;
    	regex rx("#[0-9]{1,5}#");
    	do {
    		cout << "Port actuel : " << port << ". Saisissez un nouveau numero de port : " << endl << ">>";
    		getline(cin, strPort);
    	} while(!regex_match(strPort, rx));
    	port = strPort;
    	cout << "OK : " << port << endl;
    	return 0;
    }
    S'il compile, tu as une erreur dans tes includes, ou une interférence de namespace

    S'il ne compile pas, ton Eclipse est mal configuré, et/ou ne supporte pas (une partie de) C++11
    En fait il compile mais me met les même erreurs qu'avec le source d'origine.
    18:32:20 **** Incremental Build of configuration Debug for project test ****
    make all
    Building file: ../main.cpp
    Invoking: Cross G++ Compiler
    g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp"
    In file included from /usr/include/c++/4.4/regex:35,
    from ../main.cpp:9:
    /usr/include/c++/4.4/c++0x_warning.h:31:2: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.
    ../main.cpp: In function ‘int main()’:
    ../main.cpp:18: error: ‘regex’ was not declared in this scope
    ../main.cpp:18: error: expected ‘;’ before ‘rx’
    ../main.cpp:22: error: ‘rx’ was not declared in this scope
    ../main.cpp:22: error: ‘regex_match’ was not declared in this scope
    make: *** [main.o] Erreur 1

    18:32:21 Build Finished (took 370ms)
    Merci.

    ps: je ré-édite j'avais pas vu l'erreur je ne sais pas trop ou ajouter "-std=c++0x"

    Merci

  6. #6
    Expert Confirmé Sénior

    Homme Profil pro Pierre
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    2 117
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 2 117
    Points : 4 501
    Points
    4 501

    Par défaut

    Citation Envoyé par stc074 Voir le message
    je ré-édite j'avais pas vu l'erreur je ne sais pas trop ou ajouter "-std=c++0x"
    Merci
    En gros, il faut faire en sorte que la ligne de commande
    Code :
    g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp"
    contienne aussi -std=c++0x (voire -std=c++11, si tu as g++ 4.7)

    Tu utilise un makefile (d'après le "make all"), il faut modifier dedans le CFlags ou CPPFlags (ou une variante avec les majuscules).

    Si tu utilise un IDE, il faut chercher dans ses options de compilations pour rajouter l'option en question. éventuellement, ca peut être une case "support du C++11" ou "support du C++0x"


    PS: les erreurs empèchent la compilation, seuls les warnings sont tolérés. Donc, non, ca ne compile pas.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • La plus sotte des questions est celle qu'on ne pose pas.

    Pour faire des graphes, essayez yEd.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •