解决opencv error C2065:“val: 未声明的标识符

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011879633/article/details/51941397

开发环境:win10,VS2013,64位

在VS中使用opencv时,有时会出现error C2065: “val”: 未声明的标识符,而且好像是在解决方案平台是x64的时候才会出现,win32没有出现这个情况,不过也说不定,我没测试,win32的时候禁用语言扩展是“否”,x64的时候是“是(/za)”,改成“否”以后不会出现该错误,不过我的项目出现了别的错误,我也没深入测试。不过可以尝试一下这两种解决方案:
1. 设置禁用语言扩展为否,具体操作为:右键解决方案->属性->配置属性->C/C++->语言。
2. 第二种的话感觉比较好,因为一般出现这个问题的代码就是以下代码段,只要将其中的val改为this->val,再编译就不会出现这个问题了。

template<> inline Vec<float, 3> Vec<float, 3>::cross(const Vec<float, 3>& v) const
{
    return Vec<float,3>(val[1]*v.val[2] - val[2]*v.val[1],
                     val[2]*v.val[0] - val[0]*v.val[2],
                     val[0]*v.val[1] - val[1]*v.val[0]);
}

template<> inline Vec<double, 3> Vec<double, 3>::cross(const Vec<double, 3>& v) const
{
    return Vec<double,3>(val[1]*v.val[2] - val[2]*v.val[1],
                     val[2]*v.val[0] - val[0]*v.val[2],
                     val[0]*v.val[1] - val[1]*v.val[0]);
}

修改后为:

template<> inline Vec<float, 3> Vec<float, 3>::cross(const Vec<float, 3>& v) const
{
    return Vec<float,3>(this->val[1]*v.val[2] - this->val[2]*v.val[1],
                     this->val[2]*v.val[0] - this->val[0]*v.val[2],
                     this->val[0]*v.val[1] - this->val[1]*v.val[0]);
}

template<> inline Vec<double, 3> Vec<double, 3>::cross(const Vec<double, 3>& v) const
{
    return Vec<double,3>(this->val[1]*v.val[2] - this->val[2]*v.val[1],
                     this->val[2]*v.val[0] - this->val[0]*v.val[2],
                     this->val[0]*v.val[1] - this->val[1]*v.val[0]);
}
展开阅读全文

没有更多推荐了,返回首页