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 : cpp template et map [ Linux / Autre ] (sebome)

mercredi 8 août 2007 à 20:49:14 | cpp template et map

sebome

Bonjour à tous.
Je me suis lancé a faire un petit programme pour apprendre a me servir des map.
J'ai essayé aussi de faire des fonctions template pour afficher et supprimer la map mais j'ai des erreurs de compilation que je ne comprend pas .
Je suis sur linux.
Voici le code :

#include <iostream>
#include <map>
#include <string>
using namespace std;

typedef map<int, string> MaMap;

void addMap( MaMap*, int ,string );
template <class X, class T>
void printMap( map<X, T*>* & );
template <class X, class T>
void clean( map<X, T*>* & );


int main( int argc, char** argv )
{

  if( argc <= 1 )
    {
      cout << "Arguments?" << endl;
      return 1;
    }
  MaMap* myMap = new MaMap;
  for( int i = 0; i < argc; i++ )
    {
      addMap( myMap, i, argv[i] );
    }
  printMap( myMap );
  clean( myMap );
  return 0;
}


void addMap(MaMap* m, int i, string s )
{
  pair<MaMap::iterator, bool>res = m->insert( MaMap::value_type( i, s ));
  if( res.second == false )
    {
      cout << "Probleme ajout map" << endl;
    }
}


template <class X, class T>
void printMap( map<X,T>* &m )
{
  if( m == NULL )
    return;
  for( map<X,T>::iterator i = m->begin() ; i != m->end() ; i++ )
    {
      cout << (*i).first << "\t" << (*i).second << endl;
    }
}

template <class X, class T>
void clean(map<X, T>* &theMap)
{
  if( theMap == NULL )
    return;
  for( map<X, T>::iterator i = theMap->begin() ; i != theMap->end() ; i++ )
    {
      if( (*i).second == NULL )
    continue;
      delete (*i).second;
      (*i).second = NULL;
    }
  theMap->clear();
  delete theMap;
  theMap = NULL;
}

Et voici la compil :
main.cpp: In function «int main(int, char**)":
main.cpp:28: erreur: no matching function for call to «printMap(MaMap*&)"
main.cpp:29: erreur: no matching function for call to «clean(MaMap*&)"
main.cpp: In function «void printMap(std::map<X, T, std::less<_Key>, std::allocator<std::pair<const _Key, _Tp> > >*&)":
main.cpp:49: erreur: expected `;' before «i"
main.cpp:49: erreur: «i" was not declared in this scope
main.cpp: In function «void clean(std::map<X, T, std::less<_Key>, std::allocator<std::pair<const _Key, _Tp> > >*&)":
main.cpp:60: erreur: expected `;' before «i"
main.cpp:60: erreur: «i" was not declared in this scope
make: *** [main.o] Erreur 1

Quelqu'un à une idée sur mon problème?
Je vous remercie d'avance
Cordialement
Sebome

Sébome


mercredi 8 août 2007 à 21:58:39 | Re : cpp template et map

vecchio56

Administrateur CodeS-SourceS
Il faut définir tes fonctions avant main (une simple déclaration ne suffit pas).
Par ailleurs, (*i).second est de type string, tu ne peux donc pas le comparer à NULL, ni lui appliquer l'opérateur delete

_____________________________________
Un éditeur de ressources gratuit pour Windows


mercredi 8 août 2007 à 22:34:58 | Re : cpp template et map

sebome

J'ai mis mais fonction avant le main.
Oui je suis con pour la comparaison du (*i).second avec NULL, c'est parce que je voyé déja l'utiliser avec des pointeur sur objet...
Par contre j'ai toujours des problèmes de compilation...
#include <iostream>
#include <map>
#include <string>
using namespace std;

typedef map<int, string> MaMap;

void addMap( MaMap*, int ,string );

template <class X, class T>
void printMap( map<X,T>* &m )
{
  if( m == NULL )
    return;
  for( map<X,T>::iterator i = m->begin() ; i != m->end() ; i++ )
    {
      cout << (*i).first << "\t" << (*i).second << endl;
    }
}

int main( int argc, char** argv )
{

  if( argc <= 1 )
    {
      cout << "Arguments?" << endl;
      return 1;
    }
  MaMap* myMap = new MaMap;
  if( myMap == NULL )
    return 1;
  for( int i = 0; i < argc; i++ )
    {
      addMap( myMap, i, argv[i] );
    }
  printMap( myMap );
  delete myMap;
  return 0;
}


void addMap(MaMap* m, int i, string s )
{
  pair<MaMap::iterator, bool>res = m->insert( MaMap::value_type( i, s ));
  if( res.second == false )
    {
      cout << "Probleme ajout map" << endl;
    }
}

main.cpp: In function «void printMap(std::map<X, T, std::less<_Key>, std::allocator<std::pair<const _Key, _Tp> > >*&)":
main.cpp:15: erreur: expected `;' before «i"
main.cpp:15: erreur: «i" was not declared in this scope
main.cpp: In function «void printMap(std::map<X, T, std::less<_Key>, std::allocator<std::pair<const _Key, _Tp> > >*&) [with X = int, T = std::basic_string<char, std::char_traits<char>, std::allocator<char> >]":
main.cpp:36:   instantiated from here
main.cpp:15: erreur: dependent-name «std::map<X,T,std::less<_Key>,std::allocator<std::pair<const _Key, _Tp> > >::iterator" is parsed as a non-type, but instantiation yields a type
main.cpp:15: note: say «typename std::map<X,T,std::less<_Key>,std::allocator<std::pair<const _Key, _Tp> > >::iterator" if a type is meant
make: *** [main.o] Erreur 1



Sébome


mercredi 8 août 2007 à 23:07:58 | Re : cpp template et map

vecchio56

Administrateur CodeS-SourceS
Avec Visual C++ 2005, je n'ai pas d'erreur avec le code que tu as mis ci-dessus
Tu peux essayer de sortir la déclaration de i du for...

_____________________________________
Un éditeur de ressources gratuit pour Windows


mercredi 8 août 2007 à 23:16:44 | Re : cpp template et map

sebome

J'ai déjà essayé de sortir le i du for ca e chane rien.
Moi je suis sur linux je compil avec g++.
J'avais déjà fait un code comme ca sur linux une fois mais c'était avec une version du compilateur plus ancienne et cela fonctionné...
il y a peut être un problème avec mon makefile je le mets au cas ou...
CC=g++
CFLAGS=-W -Wall
LDFLAGS=
EXEC=test.x
SRC= $(wildcard *.cpp)
OBJ= $(SRC:.cpp=.o)

all: $(EXEC)

test.x: $(OBJ)
        @$(CC) -o $@ $^ $(LDFLAGS)


%.o: %.cpp
        @$(CC) -o $@ -c $< $(CFLAGS)


clean:
        @rm -rf *.o
        @rm -rf *~

rmfull: clean
        @rm -rf $(EXEC)

En tout cas merci beaucoup pour ton aide!

Sébome
un peu de programmation en C et en VB et de photoshop



Cette discussion est classé dans : void, cpp, main, map, mamap


Répondre à ce message

Sujets en rapport avec ce message

Erreur de compilation ... [ par Tidam ] RE bijour a tous ! Voila quand je compil sous linux ma source, j'obtient les erreurs suivante : main.cpp:239: void value not ignored as it ought to be Débutant : Inclusion de header dans main.cpp + problème de déclaration de classe [ par goddez ] Bonjour à tous :), Je rencontre un problème plutôt spéciale depuis 2 jours et je n'arrive pas à mettre le doigt sur ce qui n'est pas correct. Je décla code de cryptage,débutant [ par RoseX ] voila j'ai un probleme, je créé un logiciel ayant pour but de crypter un message et de le décrypter a demande. je vais dabors vous exposer mon code en Erreur sous visual [ par alphaone ] Je tante de compiler mon programme sous visual, avant je le fessait avec mingw et cella marché trés bien, voila mes erreurs:1>.\main.cpp(375) : error un petit exercice [ par yohann59 ] Bonjour à tous, Alors voilà, je ne programme pas en C++, et on m'a demandé de résoudre ceci :(Si l'un d'entre vous à une idée, je sui portée globale typedef compilation separée [ par tbpacker ] Bonjour a tous,mon probleme est le suivant:Ou placer un typedef vector VEC dans un code objet comprenant:-main.cpp-matrice.cpp-matrice.hsachant que le map [ par taieb84 ] salut j'ai une classe caisse class caisse{            float val;        int nbr;            public:            bool exist(float);    void ajouter(floa compile à plusieurs fichiers [ par ntrvdonett ] Bonsoir,Au risque de faire rire, j'ai un problème de compilation en mettant une class dans un fichier à part, je rame depuis deux heure pour rien, et Probleme avec winsock [ par ratala ] Bonjour, J'éssaye de travailler avec les winsocks mais à chaque fois que je compile, j'ai ce message d'erreur :.objs\main.o:main.cpp:(.text+0x649): un c::b et socket [ par sheorogath ] bonjour voulant faire un peu de c++ pour changer je me telecharge un ide : code::blocksvoulant m'initier au socket un peu je reussi a me procurer un c


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

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,842 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é.