gpt4 book ai didi

c++ - Visual C++ 6.0 中的 cvblob 编译错误

转载 作者:行者123 更新时间:2023-11-28 01:09:59 25 4
gpt4 key购买 nike

我正在使用 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

关于如何解决这些问题,您有什么想法吗?

在此先感谢您的帮助!

--------更新--------

我试图编辑和更正代码以消除问题中的三个错误。

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;

最佳答案

C2371 - VC6 对局部变量的范围草率。应该能够通过使代码明确使用变量名来解决这个问题。

C2664 - 似乎无法使用双端队列迭代器初始化 vector - 调用 vector::vector() 的错误重载?可能必须通过以某种方式手动将双端队列元素复制到新 vector 来解决这个问题。

C2440 - 检查对象是否兼容(VS2008 似乎是这样认为的)并添加适当的转换。

编辑:您的代码不应该是这样的吗?

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

关于c++ - Visual C++ 6.0 中的 cvblob 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3925255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com