Accueil > Forum > > > > Set transform C++
Set transform C++
mercredi 29 octobre 2008 à 15:26:38 |
Set transform C++

ffenforce10
|
Bonjour,
Voilà, j'ai un petit problème avec la fonction transform pour appliquer un foncteur...
Mon code complilait lorsque j'utilisait un vecteur, mais depuis que je l'ai remplacé par un set, le compilo gueule...
#ifndef IMAGE_H
#define IMAGE_H
#include <iostream>
#include <string>
#include <set>
#include <iterator>
#include <cctype>
#include <algorithm>
using namespace std;
class Image{
private:
set<string> mots_cles;
string nom;
string datepdv;
float taille;
int largeur;
int hauteur;
public:
//conversion en minuscules des mots clés :
class to_lower{
public:
inline string operator()(string& s){
int cpt = 0;
while ( s[cpt] != '\0' ){
if ( ( s[cpt] >= 'A' ) && ( s[cpt] <= 'Z' ) ) s[cpt] += 32;
cpt++;
}
return(s);
}
};
inline void mots_cles_en_minuscules(){
transform(mots_cles.begin(), mots_cles.end(), mots_cles.begin(), to_lower());
}
};
#endif
Voici l'erreur que me met le compilateur (pour info j'utilise dev C++ sous vista) :
C:\Dev-Cpp\include\c++\3.4.2\bits\stl_algo.h In function `_OutputIterator std::transform(_InputIterator, _InputIterator, _OutputIterator, _UnaryOperation) [with _InputIterator = std::_Rb_tree_const_iterator<std::string>, _OutputIterator = std::_Rb_tree_const_iterator<std::string>, _UnaryOperation = Image::to_lower]':
789 C:\Dev-Cpp\include\c++\3.4.2\bits\stl_algo.h no match for call to `(Image::to_lower) (const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)'
note F:\Pas musique\IUT 2A\C++\imagestl\image.h:112 candidates are: std::string Image::to_lower::operator()(std::string&)
Merci à ceux qui voudront bien me consacrer un peu de leur temps.
|
|
mercredi 29 octobre 2008 à 20:23:24 |
Re : Set transform C++

Lucky92
|
Salut,
Je suis sous Visual C++ 2005 et ton code compile chez moi !?
Cependant, j'ai deux petits conseils : - supprime la directive "using namespace std;" et laisse std::string, std::set, etc, surtout dans les headers ! - ta manipulation me semble complexe ;normalement les lignes suivantes suffisent pour mettre en miniscule les chaîne de ton conteneur - tolower étant une fonction de la librairie standard.
for ( std::set<std::string>::iterator it = ss.begin() ; it != ss.end() ; it++ ) { std::transform( it->begin() , it->end() , it->begin() , tolower ); }
|
|
mercredi 29 octobre 2008 à 21:01:45 |
Re : Set transform C++

ffenforce10
|
Salut Lucky92 !
Avec ton code, le compilo me renvoie une erreur du même genre :
124 F:\Pas musique\IUT 2A\C++\imagestl\image.h no matching function for call to `transform(__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, <unknown type>)'
Apparemment le compilo ne reconnait pas la fonction tolower...
Pourquoi vaut-il mieux utiliser std:: un peu partout que using namespace std ?
|
|
mercredi 29 octobre 2008 à 21:29:03 |
Re : Set transform C++

Lucky92
|
Essaie de compiler juste le petit programme suivant , pour voir...
#include <cctype> #include <iostream> #include <string> #include <set> #include <algorithm>
int main() { std::set<std::string> ss;
ss.insert( "ABOUDABI" ); ss.insert( "PariS" ); ss.insert( "NewYork" ); ss.insert( "OUAGADOUGOU" );
for ( std::set<std::string>::iterator it = ss.begin() ; it != ss.end() ; it++ ) { std::transform( it->begin() , it->end() , it->begin() , tolower ); }
std::copy( ss.begin() , ss.end() , std::ostream_iterator<std::string>( std::cout , "\n" ) ); }
Si ce programme marche, c'est que le problème est ailleurs ( peut-être dans tes fichiers cpp ), auquel cas, je t'invite à les mettre dans ce post. Sinon, j'essaierais de compiler sous gnu.
|
|
mercredi 29 octobre 2008 à 21:36:19 |
Re : Set transform C++

ffenforce10
|
Ce programme ne compile pas non plus.
L'erreur est la même.
J'ai même une autre erreur : `ostream_iterator' is not a member of `std'
Sinon tu n'as pas répondu à ma question concernant les std::
Merci d'avance ;)
|
|
mercredi 29 octobre 2008 à 21:41:12 |
Re : Set transform C++

Lucky92
|
Quant aux std::, il y a deux bonnes raisons pour les laisser dans les headers : 1 - les namespaces sont faits pour empêcher les conflits de nommage des types, et les headers sont justement susceptibles d'être inclus dans plusieurs sources. Si tu laisses std:: dans le header, le source client, en cas de conflit, a la possiblité de se dépatouiller en jouant sur les namespaces, mais si tu ne le fais pas, le source client ne pourra pas utiliser ta classe. 2 - en cas de portage, tu seras content d'avoir une clé de recherche tel que "std::" pour rechercher et remplacer rapidement les types clé de la stl.
|
|
mercredi 29 octobre 2008 à 22:30:13 |
Re : Set transform C++

Lucky92
|
Réponse acceptée !
J'ai essayé avec gcc et j'ai les mêmes pb que toi... Je pense que l'implémentation de la STL dans GNU considère que les éléments des set sont const et empêche leur modifications. Le mieux serait que tu modifies la casse de tes mots clés au moment de l'insertion dans le set. Quant au ostream_iterator, je ne sais pas...
|
|
mercredi 29 octobre 2008 à 22:48:52 |
Re : Set transform C++

ffenforce10
|
Merci pour ces précisions Lucky92, ça fait plaisir d'avoir des réponses claires et rapides :)
|
|
Cette discussion est classée dans : string, image, include, to, std
Répondre à ce message
Sujets en rapport avec ce message
Probleme EDL (VC++7) [ par vecchio56 ]
Bonjour J'ai deux problèmes d'edition de liens: Dialog.obj : error LNK2001: symbole externe non résolu "public: void __thiscall std::_String_base::_X
std::string to LowerCase [ par TeLeTUbIz ]
Salut ! Ayant la fleme de programmer cet algo, je voudrais savoir si qqu'un connait une méthode rapide de changement de casse d'un std::string.Voilà
Template qui fonctionne pas ? [ par Cethywolf ]
Voilà, j'ai une fonction template qui fonctionne très bien toute seule, mais dés que je l'inclue dans une classe, j'ai une erreur de spécialisation ..
pb conversion CString string pour affichage ds combobox [ par phenix6942 ]
bonjour à tousje realise un projet mfc dans lequel j utilise plusieurs boites de dialogue.dans une de ces boites je souhaite afficher des string dans
La class string [ par jderf ]
Je suis débutant et je teste la class string. Voici un code tous simple, mais y'a un probleme de conversion à la compil que je ne comprend pas. Les er
Problème au linkage [ par TorTukiTu ]
Bonjour, je poste aujourd'hui car j'ai passé la nuit sur le problème qui suit: (Je tourne sous ubuntu linux, la compilation a lieu avec g++)J'ai un co
Testé dll c++ [ par wislam2007 ]
Salut mon dll que je veux testé est : Header [code=cpp] /* verify that the version is high enough to compile this file*/ #ifndef __REQUIRED_RPCNDR_H_
Etendre std::string(char *) pour utiliser nos references de char[] a l'interne [ par ebeaumier ]
Bonjour,Je dois appeler une API externe qui ne prend que des "const string &" et nous utilisons a l'interne des char[].Est-il possible d'étendre la cl
Passage d'un String dans une DLL C++ [ par Argile92 ]
Bonjour à tous.J'aimerai pouvoir accéder à un fichier texte via une DLL.Je suis dans Excel, avec l'adresse où se trouve mon fichier texte que j'aimera
Correction de mon programme pour ecrire une image avec succés [ par ami2008 ]
#include #include #include #include #define LARGEUR 256 #define HAUTEUR 256 int main() { //------------------------------------- // Déclaration
Livres en rapport
|
Derniers Blogs
PRATIQUE DE SILVERLIGHT PAR ERIC AMBROSIPRATIQUE DE SILVERLIGHT PAR ERIC AMBROSI par MPOWARE
Je viens de finir la lecture du dernier livre d'
Eric Ambrosi
Son livre donne une approche pratique de Silverlight qui sera aussi bien comprise par le développeur que par le designeur.
Tous les aspects du développement RIA sont abordés: animations, 3...
Cliquez pour lire la suite de l'article par MPOWARE APPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NETAPPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NET par odewit
2 déclinaisons de Silverlight et 2 déclinaisons de Mono permettent dorénavant (ou permettront prochainement) de développer des applications .NET mobiles pour les principales plates-formes du marché :
Silverlight pour Symbian, basé sur Silverlight 2...
Cliquez pour lire la suite de l'article par odewit ZUNE : NOUVELLE VERSION DU ZUNE SOFTWARE - V 4.2ZUNE : NOUVELLE VERSION DU ZUNE SOFTWARE - V 4.2 par ROMELARD Fabrice
Avec la dernière génération du lecteur MP3 de Microsoft, le ZUNE HD, Microsoft a publié une nouvelle version du logiciel pour PC. Ainsi, je me suis décidé à installer celle-ci sur mon Tablet PC ACER, comme toujours le logiciel est donc tél...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice L'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIESL'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIES par odewit
La tendance est aux interfaces naturelles (NUI), et le keynote de Bill Buxton au MIX l'a bien souligné.
La charte graphique et ergonomique de Windows Phone 7 a donc été entièrement repensée en vue d'obtenir un maximum d'efficacité sur ce point. En re...
Cliquez pour lire la suite de l'article par odewit
Forum
RE : TRADAIONRE : TRADAION par rt15
Cliquez pour lire la suite par rt15
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|