VS- -> VS2005 ou 2008

VS- -> VS2005 ou 2008 - C++ - Programmation

Marsh Posté le 15-10-2008 à 11:59:08    

J'ai une erreur a la compilation sous 2005 et 2008 avec :
 
m_XAxis.erase (&m_XAxis[nAxis]);
 
ou  
 std::vector <CXGraphAxis>  m_XAxis;
 
l'erreur est :
 
error C2664: 'std::_Vector_iterator<_Ty,_Alloc> std::vector<_Ty>::erase(std::_Vector_iterator<_Ty,_Alloc> )' : impossible de convertir le paramètre 1 de 'CXGraphAxis *' en 'std::_Vector_iterator<_Ty,_Alloc>'
1>        with
1>        [
1>            _Ty=CXGraphAxis,
1>            _Alloc=std::allocator<CXGraphAxis>
1>        ]
1>        Aucun constructeur n'a pu prendre le type de source, ou la résolution de la surcharge du constructeur était ambiguë
 
Quelqu'un peut m'aider merci d'avance

Reply

Marsh Posté le 15-10-2008 à 11:59:08   

Reply

Marsh Posté le 15-10-2008 à 12:10:40    

il a raison, la fonction attend un itérateur, pas un pointeur vers un élément
 
Edit : sur un vecteur, tu peux faire :
 

Code :
  1. m_XAxis.erase( m_XAxis.begin() + nAxis );


 
Edit2 : Vu que tu n'as pas l'air entièrement à l'aise avec la STL, j'en profite pour rappeler que, si tu fais souvent des suppressions d'éléments en milieu de conteneur, le vecteur n'est pas nécessairement un bon choix. Enfin, à toi de voir en fonction de ton contexte :)


Message édité par theshockwave le 15-10-2008 à 12:13:40
Reply

Marsh Posté le 15-10-2008 à 12:17:27    

Hello,
On ne peut pas faire un erase sur un element, il faut le faire sur un iterator. Exemple :
 

Code :
  1. #include <vector>
  2. #include <iostream>
  3. #include <iterator>
  4. using namespace std;
  5. int main(int argc, char ** argv){
  6.   vector<char> v;
  7.   // On ajoute quelques elements
  8.   v.push_back('a');
  9.   v.push_back('b');
  10.   v.push_back('c');
  11.   v.push_back('d');
  12.   // On affiche le tableau
  13.   copy(v.begin(),v.end(),ostream_iterator<char>(cout << "avant : " ));
  14.   cout << endl;
  15.   // On supprime le 3em element
  16.   v.erase(v.begin()+2);
  17.   // On affichae le tableau
  18.   copy(v.begin(),v.end(),ostream_iterator<char>(cout << "apres : " ));
  19.   cout << endl;
  20.   return 0;
  21. }


Reply

Marsh Posté le 15-10-2008 à 12:17:55    

Merci pour l'aide

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed