wince菜鸟入门问题记录一

来源:互联网 发布:windows 10 ie崩溃 编辑:程序博客网 时间:2024/06/05 16:42

最近要学做一个qr码解码软件,从网上找了一个源码包,用vs2005编译出来发现了一些小问题,记录下来以供后日翻阅:

1.定义域的问题:

error C2065: “i”: 未声明的标识符

代码如下:

for (int i = 0; i < 5; i++) {baselength += buffer[i];}// pseudo fixed point calculation. I think it needs smarter codebaselength <<= DECIMAL_POINT; baselength /= 7;for (i = 0; i < 5; i++) {int leastlength = baselength * modelRatio[i] - baselength / 2;int mostlength = baselength * modelRatio[i] + baselength / 2;//TODO rough finder pattern detectionint targetlength = buffer[(pointer + i + 1) % 5] << DECIMAL_POINT;if (targetlength < leastlength || targetlength > mostlength) {return false;}

修改方法:一检查发现就是i的定义的范围只在一个for中,直接在循环外定义一个i即可,不过想不通为什么会有这样的写法。


2.函数的重载问题

error C2668: “sqrt”: 对重载函数的调用不明确

代码如下:

DECIMAL_POINT = (int)(23-sqrt((longSide/256)));

他的解释是:

系统不知道我可能是调用的“long double sqrt(long double)” 或“float sqrt(float)”或“double sqrt(double)”,这个也很好解决

解决方法:将(int)(23-sqrt((longSide/256)));修改成(int)(23-sqrt((double)(longSide/256)));


3.调用函数类型不匹配

error C2664: “std::_Vector_iterator<_Ty,_Alloc> std::vector<_Ty>::erase(std::_Vector_iterator<_Ty,_Alloc>)”: 不能将参数 1 从“Line *”转换为“std::_Vector_iterator<_Ty,_Alloc>”

代码如下:

for(int index=0;index<lineCandidate.size();index++) {if(lineCandidate[index].x1==lineNeighbor[k].x1 && lineCandidate[index].y1==lineNeighbor[k].y1&& lineCandidate[index].x2==lineNeighbor[k].x2 && lineCandidate[index].y2==lineNeighbor[k].y2)lineCandidate.erase(&lineCandidate[index]);}

解决方法:最后发现是和vector容器的调用有关

把lineCandidate.erase(&lineCandidate[index]);改成这样lineCandidate.erase(lineCandidate.begin()+index);

编译就通过了。


0 0
原创粉丝点击