开发环境: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]);
}