Bonjour à tous !
Je travaille sous C++Builder 6 (10.161), et je rencontre un petit problème avec la fonction remove : en effet, il existe deux fonctions portant ce nom dans le namespace std.
La première,, dans cstdio (pour supprimer un fichier) ; la deuxième,
Code : Sélectionner tout - Visualiser dans une fenêtre à part int remove(const char *), dans algorithm (pour enlever des élèments d'un container, ou plutôt pour les déplacer en fin de container). Or, lorsque je souhaite utiliser la fonction template, j'obtiens une erreur du compilateur, indiquant qu'il ne sélectionne pas la bonne fonction. Est-ce normal d'avoir un tel conflit ?!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 template <class ForwardIterator, class T> ForwardIterator remove(ForwardIterator first, ForwardIterator last, const T& value);![]()
Voici un code minimal qui ne compile pas :
Et l'erreur qu'il donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <algorithm> #include <cstdio> #include <vector> int main() { std::vector<int> v; v.push_back(3); v.push_back(2); v.push_back(5); v.erase(std::remove(v.begin(), v.end(), 2), v.end()); return 0; }
Si quelqu'un a déjà rencontré cette erreur, ou sait à quoi elle est dûe...[C++ Erreur] test_remove.cpp(13): E2034 Impossible de convertir 'int *' en 'const char *'
[C++ Erreur] test_remove.cpp(13): E2342 Mauvaise correspondance de type dans le paramètre '__path' ('const char *' désiré, 'int *' obtenu)
[C++ Erreur] test_remove.cpp(13): E2227 Paramètre supplémentaire dans l'appel à std::remove(const char *)
[C++ Erreur] test_remove.cpp(13): E2285 Impossible de trouver une correspondance pour '_STL::vector<int,_STL::allocator<int> >::erase(int,int *)'
Edit : J'ai essayé de compiler ce même code sous code::blocks, et il n'y a aucun problème...dois-je en déduire que c'est le compilateur borland qui fait des siennes ?
Partager