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

  FORUM HardWare.fr
  Programmation
  C++

  Namspace déclarant un template externe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Namspace déclarant un template externe

n°1910920
Olivier51
Posté le 01-08-2009 à 17:12:16  profilanswer
 

Tout est dans le code ...
 

Code :
  1. #include <vector>
  2. #include <iostream>
  3. namespace mynamespace {
  4. using std::iterator;
  5. using std::vector;
  6. }
  7. int main() {
  8. mynamespace::vector<int> integers(5);
  9. for(mynamespace::iterator<int> iter = integers.begin(); iter != integers.end(); iter++) {
  10.  std::cout << "- " << iter << std::endl;
  11. }
  12. return 0;
  13. }


 
Toute est dans la réponse du compilateur ...

g++ -Wno-deprecated -Wall -g  my_vector.cpp -o my_vector
my_vector.cpp: In function 'int main()':
my_vector.cpp:12: error: wrong number of template arguments (1, should be 5)
/usr/include/c++/4.3/bits/stl_iterator_base_types.h:110: error: provided for 'template<class _Category, class _Tp, class _Distance, class _Pointer, class _Reference> struct std::iterator'
my_vector.cpp:12: error: invalid type in declaration before '=' token
my_vector.cpp:12: error: cannot convert '__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >' to 'int' in initialization
my_vector.cpp:12: error: no match for 'operator!=' in 'iter != integers.std::vector<_Tp, _Alloc>::end [with _Tp = int, _Alloc = std::allocator<int>]()'


 
Comme le code le montre, j'utilise la STL qui définit :

iterator begin()
const_iterator begin()


 
Surement, un indice ... si je remplace iterator par const_iterator dans mon code, l'erreur :

Code :
  1. g++ -Wno-deprecated -Wall -g my_vector.cpp -o my_vector
  2. my_vector.cpp:5: error: 'std::const_iterator' has not been declared
  3. my_vector.cpp: In function 'int main()':
  4. my_vector.cpp:12: error: 'const_iterator' is not a member of 'mynamespace'
  5. my_vector.cpp:12: error: expected primary-expression before 'int'
  6. my_vector.cpp:12: error: expected `;' before 'int'
  7. my_vector.cpp:12: error: 'iter' was not declared in this scope
  8. make: *** [my_vector] Erreur 1

mood
Publicité
Posté le 01-08-2009 à 17:12:16  profilanswer
 

n°1910930
Joel F
Real men use unique_ptr
Posté le 01-08-2009 à 18:23:29  profilanswer
 

On dirait un probleme d'ADL foireux.
Quelle version de g++ ?

n°1910934
Un Program​meur
Posté le 01-08-2009 à 19:26:49  profilanswer
 

Essaye sans l'utilisation de mynamespace mais avec std, tu auras exactement le même problème.  L'itérateur que renvoie std::vector<>::begin() est de type std::vector<>::iterator, pas std::iterator<>.
 
std::iterator<> est une classe template dont l'utilité est d'aider à définir des itérateurs en fournissant tous les typedefs nécessaires.  Elle ne s'emploie jamais directement (et à 5 paramètres, comme te le dis le premier message d'erreur).


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1910937
Olivier51
Posté le 01-08-2009 à 19:58:55  profilanswer
 

Merci à vous deux :jap:  
 
Effectivement,  erreur d'inattention  :)


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

  Namspace déclarant un template externe

 

Sujets relatifs
MYSQL : Jointure externe excluant les id présents dans un tabledébloquer balises <keywords >sur template
Problème Template matching matlab quel façon coder ce template épuré en CSS et html ?
Symbole externe non résolu sous VisualErreur avec setTimeout dans javascript externe
Spécialisation templatetemplate et if
Utiliser une API externe[Javascript] Retarder l'appel d'un script externe
Plus de sujets relatifs à : Namspace déclarant un template externe


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