begin process at 2010 02 10 08:58:15
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

Autre

 > 

cpp template et map


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

cpp template et map

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ée 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 Problème classe et main : argument does not match [ par RS8 ] Bonjour,je fais actuellement de 'lOpenGL.Je voudrais avoir deux fichiers : drawing.cpp et main.cppDans le main.cpp il n'y a que le main et dans drawin 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


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,390 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales