非成员函数不能具有 CV 限定符
non-member function cannot have cv-qualifier
在编写以下函数abs
时,我收到错误:
非成员函数unsigned int abs(const T&)
不能具有 CV 限定符。
template<typename T>
inline unsigned int abs(const T& t) const
{
return t>0?t:-t;
}
删除函数的const
限定符后,没有错误。由于我没有修改函数内部的t
,因此上面的代码应该已经编译好了。我想知道为什么我得到错误?
您不希望修改t
的愿望在const T& t
中表示。 结束const
指定不会修改abs
所属类的任何成员变量。
由于此函数所属的类没有,因此会出现错误。
函数声明末尾的 const
修饰符适用于成员函数的隐藏this
参数。
由于这是一个自由函数,因此没有this
,也不需要该修饰符。
t
参数在参数列表中已有自己的const
。
成员函数上的 cv 限定符指定this
指针具有间接类型 const
(或 volatile
, const volatile
),因此可以在具有该限定的实例上调用成员函数。
自由函数(和类静态函数)没有this
指针。
众所周知,参数列表后面const
关键字表示这是指向指针常量的指针。
有一个非成员函数,它不属于该类,所以添加常量相反端错误发生。
问题的解决方案:要么成为类成员函数,要么删除const
关键字 const 的反端
相关文章:
- 错误:'create'不是 'cv::Tracker' 的成员
- 'cv::Mat::type':非标准语法;使用 '&' 创建指向成员的指针
- 互斥体不是cv的成员,用g++编译失败
- OpenCV CUDA 函数缺失 - 命名空间"cv:cuda"没有成员"resize"
- OpenCV 错误:“MAT”不是“cv”的成员
- 获取错误 - 使用垫子时,CV :: MAT’没有名为“ Get”的成员
- 错误:QueryFrame不是CV的成员
- 错误:'cv::face::FaceRecognizer'中没有名为'getMat'的成员
- 错误:putText不是CV的成员
- 将cv::Mat A的每个成员与cv::Mat B合并,以创建一个cv::Mat C,结果为[A(x,y),B(x,y)
- 错误:“calcOpticalFlowPyrLK”不是“cv”的成员 - OpenCV 2.4.2
- Typedef 用于指向 cv 和/或 ref 限定成员函数的指针
- cv 没有成员 BackgroundSubtractorMOG
- 为什么静态成员函数不能有 cv 限定符?
- OpenCV resize 不是 cv (OpenCV Basics) 的成员
- 如何?:将cv::Mat定义为类成员,然后在源代码文件中对其进行修改
- 如何解决错误:imread不是cv的成员
- 转发成员函数的cv-ref-qualifier
- ' BackgroundSubtractorMOG '不是' cv '的成员
- result_of具有 cv 限定参数的成员对象