Erreur de compilation cvblob dans Visual C ++ 6.0

J’utilise Microsoft Visual C ++ 6.0 et Microsoft Visual Studio 2008 pour développer un projet de vision informatique académique.

Dans ce projet, je dois utiliser OpenCV 1.1 (http://opencv.willowgargarage.com/) et CvBlob (http://code.google.com/p/cvblob/).

J’ai essayé de comstackr ce projet avec Microsoft Visual Studio 2008 et il comstack sans erreur.

Avec Visual C ++ 6.0, j’ai beaucoup d’erreurs.

OpenCV n’est pas responsable de ce comportement, car un projet sortingvial avec uniquement OpenCV (sans CvBlob) fonctionne bien.

Pour mieux comprendre les erreurs, j’ai créé un projet vide avec uniquement l’inclusion de CvBlob.

Je colle ici un bref résumé des erreurs:

cvcontour.cpp(253) : error C2371: 'i' : redefinition; different basic types (and others similar to this. i solved with variable redefinition, every time) cvcontour.cpp(318) : error C2664: 'thiscall std::vector<struct CvPoint,class std::allocator >::std::vector<struct CvPoint,class std::allocator >(unsigned int,const struct CvPoint &,const class std::allocator &)' : cannot convert parameter 1 from 'class std::deque<struct CvPoint,class std::allocator >::iterator' to 'unsigned int' No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called cvtrack.cpp(278) : error C2440: 'initializing' : cannot convert from 'struct cvb::CvTrack *const ' to 'struct cvb::CvBlob *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 

Avez-vous des idées sur comment puis-je résoudre ces problèmes?

Merci d’avance pour l’aide!

——– METTRE À JOUR ——–

J’ai essayé d’éditer et de corriger le code afin d’éliminer les trois erreurs de ma question.

L’erreur C2664 semble être la plus difficile à éviter …

J’ai remplacé la ligne mise en accusation

 return new CvContourPolygon(dq.begin(), dq.end()); 

où CvContourPolygon est un typedef std::vector CvContourPolygon;

avec

 deque::iterator dq_it;dq_it = dq.begin(); CvContourPolygon v_tmp; v_tmp.push_back(*dq_it); while (dq_it != dq.end()){ v_tmp.push_back(*dq_it++); } 

Tout d’abord, ce que j’ai écrit est correct? Alors, comment puis-je résoudre les erreurs qui en découlent?

Merci d’avance!

Erreurs (supposons que la première ligne est 318:

 cvcontour.cpp(319) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class std::deque<struct CvPoint,class std::allocator >::iterator' (or there is no acceptable conversion) cvcontour.cpp(321) : error C2664: 'push_back' : cannot convert parameter 1 from 'int' to 'const struct CvPoint &' Reason: cannot convert from 'int' to 'const struct CvPoint' No constructor could take the source type, or constructor overload resolution was ambiguous cvcontour.cpp(322) : error C2679: binary '!=' : no operator defined which takes a right-hand operand of type 'class std::deque<struct CvPoint,class std::allocator >::iterator' (or there is no acceptable conversion) cvcontour.cpp(322) : fatal error C1903: unable to recover from previous error(s); stopping compilation 

Erreur lors de l’exécution de cl.exe.

——– UPDATE2 ——–

Ce code semble fonctionner correctement!

 deque::iterator dq_it; dq_it = dq.begin(); CvContourPolygon v_tmp; for (dq_it = dq.begin(); dq_it != dq.end(); ++dq_it){ v_tmp.push_back(*dq_it); } //return new CvContourPolygon(dq.begin(), dq.end()); return &v_tmp; 

C2371 – VC6 était négligé avec la scope des variables locales. Devrait pouvoir résoudre ce problème en faisant en sorte que le code utilise des noms de variable sans ambiguïté.

C2664 – ressemble à l’échec d’initialisation d’un vecteur à l’aide d’iterators de deque – surcharge erronée sur le vecteur :: vector () étant appelée? Il faudra probablement contourner ce problème en copiant manuellement les éléments deque dans le nouveau vecteur.

C2440 – Vérifiez que les objects sont compatibles (VS2008 semble le croire) et ajoutez la dissortingbution appropriée.

EDIT: Votre code ne devrait-il pas ressembler à ceci?

 deque::iterator dq_it;dq_it = dq.begin(); CvContourPolygon v_tmp; for (dq_it = dq.begin(); dq_it != dq.end(); ++dq_it) { v_tmp.push_back(*dq_it); }