Namspace déclarant un template externe - C++ - Programmation
Marsh Posté le 01-08-2009 à 18:23:29
On dirait un probleme d'ADL foireux.
Quelle version de g++ ?
Marsh Posté le 01-08-2009 à 19:26:49
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).
Marsh Posté le 01-08-2009 à 17:12:16
Tout est dans le code ...
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 :