Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2194 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Compilation de template... (débutant)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Compilation de template... (débutant)

n°1524822
MiniMoi51
Shine On...
Posté le 06-03-2007 à 21:01:12  profilanswer
 

Bonjour,
Je suis en train de développer une petite IA d'échecs en C++, et pour les besoins du programme, je veux utiliser une table de hachage, pour l'instant assez simple. Pour cela, comme std::map ne me convient pas (structure d'arbre binaire en interne), je me fait une petite classe template moi-même. Seulement j'ai une erreur à la compilation que je ne comprends pas...
 
Le code en question est :
 

Code :
  1. // Renvoie la valeur associée à la clé passée en paramètre
  2. template <typename Key, typename Value> bool hash_table<Key, Value>::find_key(Key k, Value &res)
  3. {
  4. unsigned int index = k % taille;
  5. std::list< std::pair<Key, Value> >::iterator it = vect[index].begin();
  6. while(it != vect[index].end())
  7. {
  8.  if(it->first == k)
  9.  {
  10.   res = it->second;
  11.   return true;
  12.  }
  13.  ++it;
  14. }
  15. return false;
  16. }


 
avec

Code :
  1. vector<list<pair<Key, Value> > > vect;

comme membre privé de la classe.
 
Le message renvoyé par g++ (4.1.2) à la compilation est :
 

hash_table.cpp: In member function ‘bool hash_table<Key, Value>::find_key(Key, Value& )’:
hash_table.cpp:31: error: expected `;' before ‘it’
hash_table.cpp:33: error: ‘it’ was not declared in this scope


 
Pouvez-vous m'éclairer sur ceci ?
Merci d'avance

mood
Publicité
Posté le 06-03-2007 à 21:01:12  profilanswer
 

n°1524831
Joel F
Real men use unique_ptr
Posté le 06-03-2007 à 21:16:22  profilanswer
 

Essaye
 

Code :
  1. typename std::list< std::pair<Key, Value> >::iterator it = vect[index].begin();

n°1524841
MiniMoi51
Shine On...
Posté le 06-03-2007 à 21:37:16  profilanswer
 

Merci ça me vire mon erreur ! [:dawa]
La question maintenant c'est pourquoi...  :??:  
 
Par contre j'ai toujours une erreur, mais cette fois du linker...  
 

/tmp/ccakIuFz.o: In function `eval(Echiquier& )':
explore.cpp:(.text+0x2c7): référence indéfinie vers « hash_table<unsigned long long, int>::find_key(unsigned long long, int& )»
explore.cpp:(.text+0x1c97): référence indéfinie vers « hash_table<unsigned long long, int>::insert(unsigned long long, int)»
/tmp/ccH1ukRO.o: In function `__static_initialization_and_destruction_0(int, int)':
partie.cpp:(.text+0x81): référence indéfinie vers « hash_table<unsigned long long, int>::hash_table(unsigned int)»
collect2: ld returned 1 exit status


 
Alors que le constructeur est bien défini dans le fichier hash_table.cpp :
 

Code :
  1. template <typename Key, typename Value> hash_table<Key, Value>::hash_table(unsigned int size) : taille(size), vect(std::vector< std::pair<Key, Value> >(size))
  2. {
  3. return;
  4. }


 
Tout comme les autres fonctions membres, le fichier d'en-tête est inclu dans le fichier .cpp correspondant, et le fichier source est dans le même repertoire...
 
Je crois que le C++ c'est pas fait pour moi...

n°1524869
Joel F
Real men use unique_ptr
Posté le 06-03-2007 à 22:12:11  profilanswer
 

les template se définissent uniquement dans les .h ...  
Lire les bases aideraient bien ;)
 
http://c.developpez.com/faq/cpp/?page=templates

n°1524873
fashiongwe​n
Posté le 06-03-2007 à 22:14:38  profilanswer
 

BJR, je suis a la recherche d'une personne qui connaitrais bien html  

n°1524874
Joel F
Real men use unique_ptr
Posté le 06-03-2007 à 22:15:01  profilanswer
 

fashiongwen a écrit :

BJR, je suis a la recherche d'une personne qui connaitrais bien html


Le rapport avec la choucroute ?

n°1524875
fashiongwe​n
Posté le 06-03-2007 à 22:15:31  profilanswer
 

en quelques sorte

n°1524877
fashiongwe​n
Posté le 06-03-2007 à 22:16:56  profilanswer
 

j'ai commencé a faire mon site, et je voudrais  qu'on maide pour la section portfolio

n°1524878
Joel F
Real men use unique_ptr
Posté le 06-03-2007 à 22:21:06  profilanswer
 

tu as vu le titre du topic ? on aprle d'HTML ? non. Donc poste un nouveau sujet :o

n°1524880
MiniMoi51
Shine On...
Posté le 06-03-2007 à 22:22:36  profilanswer
 

Joel F a écrit :

les template se définissent uniquement dans les .h ...  
Lire les bases aideraient bien ;)
 
http://c.developpez.com/faq/cpp/?page=templates


Merci pour ces réponses, je pensais bêtement qu'il n'y avais pas raisons que ça change pour les classes templates... ;)

mood
Publicité
Posté le 06-03-2007 à 22:22:36  profilanswer
 

n°1524907
++fab
victime du syndrome IH
Posté le 06-03-2007 à 23:33:22  profilanswer
 

Joel F a écrit :

les template se définissent uniquement dans les .h ...


C'est simplifié. Les définitions des classes templates oui, uniquement. La définition de tout ce qui peut-être candidat à la résolution de surcharge (les fonctions quoi) n'est pas obligatoirement inclu dans un header.  

n°1525126
Joel F
Real men use unique_ptr
Posté le 07-03-2007 à 12:16:42  profilanswer
 

++fab a écrit :

C'est simplifié. Les définitions des classes templates oui, uniquement. La définition de tout ce qui peut-être candidat à la résolution de surcharge (les fonctions quoi) n'est pas obligatoirement inclu dans un header.


 
tu es en train d eme dire que tu peut mettre le corps d'une fonction tempalte dans un .cpp o_O ?

n°1525522
++fab
victime du syndrome IH
Posté le 07-03-2007 à 19:34:28  profilanswer
 

Joel F a écrit :

tu es en train de me dire que tu peux mettre le corps d'une fonction template dans un .cpp o_O ?


Oui.
 
Pronostic sur le diagnostic du compilateur sur la TU suivante ?
 

Code :
  1. template <class T>
  2. void f( T );
  3. void g()
  4. {
  5.     f( 2 );
  6. }


 
Voir §14.8.3.6, que je connais par coeur pour m'être déjà ridiculisé dessus :o

n°1525572
Taz
bisounours-codeur
Posté le 07-03-2007 à 22:05:44  profilanswer
 

nan mais t'as le droit d'instancier à la main, on dit pas.

n°1525586
Joel F
Real men use unique_ptr
Posté le 07-03-2007 à 22:37:53  profilanswer
 

++fab a écrit :


Voir §14.8.3.6, que je connais par coeur pour m'être déjà ridiculisé dessus :o


 
Je note  :jap:  

n°1525589
++fab
victime du syndrome IH
Posté le 07-03-2007 à 22:43:01  profilanswer
 

Citation :

nan mais t'as le droit d'instancier à la main, on dit pas.


à la main, ou pas. La norme dit que le code ci-dessus est légal si est présent dans le programme une instanciation de f<int>, qu'elle soit implicite ou explicite.
J'ai passé sous silence export, vu que le PO utilise GCC/g++.
Et j'espère que la tendance à mettre tout le code dans les headers va aller decrescendo.


Message édité par ++fab le 07-03-2007 à 22:44:12
n°1525612
++fab
victime du syndrome IH
Posté le 07-03-2007 à 23:51:59  profilanswer
 

MiniMoi51 a écrit :

Bonjour,
Je suis en train de développer une petite IA d'échecs en C++, et pour les besoins du programme, je veux utiliser une table de hachage, pour l'instant assez simple.


A tout hasard, tu as à ta disposition std::tr1::unordered_map, qui est une table de hachage, utilisable sur ton compilateur.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Compilation de template... (débutant)

 

Sujets relatifs
Erreur Compilation stray '\357'problème de compilation sous eclipse
problème compilation (link)erreurs compilation avec cygwin
erreurs (de link ?) a la compilation pour créer une fenetre avec win32Compilation de FreeTTS
Template, namespace, autre ?[Résolu][VBS Débutant Boucle Do-While-Loop Active Directory]
Problème de compilation 
Plus de sujets relatifs à : Compilation de template... (débutant)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR