C++ c++;:OpenCV::Mat::at无法分配给常量变量
以C++ c++;:OpenCV::Mat::at无法分配给常量变量,c++,opencv,C++,Opencv,以 class T { public: Mat D; void operator()(double &p, const int * pos) const { D.at<double>(pos[0]*2 + 1, 1) = p; } T(Mat D); }; T类{ 公众: matd; void运算符()(双p,常量int*pos)常量{ D.at(位置[0]*2+1,1)=p;
class T {
public:
Mat D;
void operator()(double &p, const int * pos) const {
D.at<double>(pos[0]*2 + 1, 1) = p;
}
T(Mat D);
};
T类{
公众:
matd;
void运算符()(双p,常量int*pos)常量{
D.at(位置[0]*2+1,1)=p;
}
T(matd);
};
导致编译错误“cv::Mat::at”:不能将其赋值给常量变量。构造函数只指定D作为参数
将D移动到全局范围可以修复错误,但这当然不是首选。这就引出了两个问题:
Mat::forEach
中使用,因此将附加变量作为参数传递不是一个选项
void operator()(double &p, const int * pos) const
是一个const
函数。这意味着在函数体内,所有类成员都被视为const
。由于您想要变异D
您有几个选项,您可以删除const
,您可以将D
声明为mutable
,以便对其进行修改,或者您可以将D
作为一个参考成员,如
class T {
public:
Mat& D;
void operator()(double &p, const int * pos) const {
D.at<double>(pos[0]*2 + 1, 1) = p;
}
T(Mat& D) : D(D);
};
T类{
公众:
Mat&D;
void运算符()(双p,常量int*pos)常量{
D.at(位置[0]*2+1,1)=p;
}
T(Mat&D):D(D);
};
这是因为引用被标记为const
(这意味着什么都没有,因为引用不能被重新分配),而不是它所引用的内容
是一个const
函数。这意味着在函数体内,所有类成员都被视为const
。由于您想要变异D
您有几个选项,您可以删除const
,您可以将D
声明为mutable
,以便对其进行修改,或者您可以将D
作为一个参考成员,如
class T {
public:
Mat& D;
void operator()(double &p, const int * pos) const {
D.at<double>(pos[0]*2 + 1, 1) = p;
}
T(Mat& D) : D(D);
};
T类{
公众:
Mat&D;
void运算符()(双p,常量int*pos)常量{
D、 at(位置[0]*2+1,1)=p;
}
T(Mat&D):D(D);
};
这是因为引用被标记为
const
(这意味着什么,因为引用不能被重新分配),而不是它所指的内容。通过引用保持Mat
D。通过引用保持Mat
D
。