J'utilise Microsoft Visual C++ 6.0 et Microsoft Visual Studio 2008 pour développer un projet de vision par ordinateur académique.Erreur de compilation cvblob dans Visual C++ 6.0
Dans ce projet, j'ai besoin d'utiliser OpenCV 1.1 (http://opencv.willowgarage.com/) et CvBlob (http://code.google.com/p/cvblob/).
J'ai essayé de compiler ce projet avec Microsoft Visual Studio 2008 et il compile sans erreurs. Avec Visual C++ 6.0, j'ai eu beaucoup d'erreurs avec
OpenCV n'est pas responsable de ce comportement, car un projet trivial avec seulement OpenCV (sans CvBlob) fonctionne bien.
Pour mieux comprendre les erreurs j'ai fait un projet vide avec seulement 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<struct CvPoint> >::std::vector<struct CvPoint,class std::allocator<struct CvPoint> >(unsigned int,const struct CvPoint &,const class std::allocator<struct CvPoint> &)' : cannot convert parameter 1 from 'class std::deque<struct CvPoint,class std::allocator<struct CvPoint> >::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
vous avez des idées sur comment puis-je résoudre ces problèmes?
Merci d'avance pour l'aide!
-------- -------- MISE A JOUR
J'ai essayé de modifier et corriger le code pour elminate les trois erreurs dans ma question.
L'erreur C2664 semble être plus difficile à cirmumvent ...
J'ai remplacé la ligne mis en accusation
return new CvContourPolygon(dq.begin(), dq.end());
où CvContourPolygon est un typedef std::vector<CvPoint> CvContourPolygon;
avec
deque<int>::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++);
}
D'abord, ce que j'ai écrit est correct? Que, comment puis-je résoudre les erreurs qui se sont produites à partir de cela?
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<struct CvPoint> >::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<struct CvPoint> >::iterator' (or there is no acceptable conversion)
cvcontour.cpp(322) : fatal error C1903: unable to recover from previous error(s); stopping compilation
erreur d'exécution cl.exe
-------- -------- MAJ2
Ce code semble fonctionner correctement
deque<CvPoint>::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;
Existe-t-il une bonne raison d'utiliser VC 6.0? Évitez-le si vous le pouvez (et vous pouvez, vous avez MSVC 9.0). – rubenvb
oui, il y a une bonne raison! dans l'ordinateur de la mine, j'ai MSVS2008 et tout le code fonctionne bien! mais dans le PC académique je ne peux pas choisir l'IDE et le compilateur, et il y a MSVC++ 6.0! Donc, malheureusement , je dois compiler mon code dans cet environnement ... – Sbaush