Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Set transform C++ [ Divers / Divers ] (ffenforce10)

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é 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 erreur std::operator [ par chalmia2s ] Bonjour,je fais un code sur visual c++ et j'obient 180 erreur!!!!!!!!!!!!!!! du genre: pour le code: std::string str;std::string nom="";std::string 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 écriture classe dans un fichier texte [ par nord666 ] Salut tout le monde!J'ai besoin d'aide pour l'écriture dans un fichier. Je voudrais que l'extension du fichier soit .city. Ce que je veux écrire dans Problème Template [ par lglandeur ] Bonjour, pour la réalisation d'un programme j'ai besoin d'accéder à un fichier ini, et comme je ne veux pas être limité à Windows, j'ai eu l'idée de m


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.