Я использую Microsoft Visual C ++ 6.0 и Microsoft Visual Studio 2008 для разработки академического проекта по компьютерному зрению.
В этом проекте мне нужно использовать OpenCV 1.1 (http://opencv.willowgarage.com/) и CvBlob (http://code.google.com/p/cvblob/).
). Я попытался скомпилировать этот проект с помощью Microsoft Visual Studio 2008, и он компилируется без ошибок.
В Visual C ++ 6.0 я получил много ошибок.
OpenCV не несет ответственности за это поведение, потому что тривиальный проект только с OpenCV (без CvBlob) работает хорошо.
Комулучше понять ошибки Я сделал пустой проект только с включением CvBlob.
Я вставляю здесь краткую сводку ошибок:
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
У вас есть идеи о том, как я могу решить эти проблемы?
Заранее спасибо за помощь!
-------- ОБНОВЛЕНИЕ --------
Iпопытался отредактировать и исправить код, чтобы устранить три ошибки в моем вопросе.
Ошибка C2664 кажется более трудной для обхода ...
Я заменил указанную линию
return new CvContourPolygon(dq.begin(), dq.end());
, где CvContourPolygon представляет собой typedef std::vector<CvPoint> CvContourPolygon;
с
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++);
}
Во-первых, что я написал правильно?Чем, как я могу устранить ошибки, которые произошли из-за этого?
Заранее спасибо!
Ошибки (предположим, что первая строка 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
ОшибкаВыполнение cl.exe.
-------- ОБНОВЛЕНИЕ2 --------
Этот код работает правильно!
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;