Ошибка компиляции cvblob в Visual C++ 6.0C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ошибка компиляции cvblob в Visual C++ 6.0

Сообщение Anonymous »

Я использую 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::std::vector(unsigned int,const struct CvPoint &,const class std::allocator &)' : cannot convert parameter 1 from 'class std::deque::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


Есть ли у вас идеи, как я могу решить эти проблемы?

Заранее спасибо за помощь!

-------- ОБНОВЛЕНИЕ - -------

Я попытался отредактировать и исправить код, чтобы устранить три ошибки в моем вопросе.

Ошибку C2664, похоже, сложнее обойти...

Я заменил строку с обвинением

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


где CvContourPolygon — это определение типа std::vector CvContourPolygon;

с < /p>

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++);
}


Во-первых, то, что я написал, верно? Как мне решить возникшие из-за этого ошибки?

Заранее спасибо!

Ошибки ( предположим, что первая строка — 318:

cvcontour.cpp(319) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class std::deque::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::iterator' (or there is no acceptable conversion)
cvcontour.cpp(322) : fatal error C1903: unable to recover from previous error(s); stopping compilation


Ошибка выполнения cl.exe.

-------- UPDATE2 -- ------

Кажется, этот код работает правильно!

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;


Подробнее здесь: https://stackoverflow.com/questions/392 ... sual-c-6-0
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»