与之相关的类定义,
"scripts": {
"start": "./node_modules/.bin/webpack-dev-server",
"build": "node server.js",
"heroku-postbuild": "npm install && npm run build"
}
导致编译错误,'cv :: Mat :: at':您无法分配给常量。构造函数只需将 D 分配为参数。
将 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);
};
中使用,因此不能将其他变量作为参数传递。
答案 0 :(得分:4)
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);
};
之所以可行,是因为引用被标记为const
(这意味着没有任何内容,因为无法重新分配引用),而不是引用的内容。