c ++:OpenCV cv :: Mat :: at无法分配给const变量

时间:2018-12-10 16:58:08

标签: c++ opencv

与之相关的类定义,

"scripts": {
    "start": "./node_modules/.bin/webpack-dev-server",
    "build": "node server.js",
    "heroku-postbuild": "npm install && npm run build"
  }

导致编译错误,'cv :: Mat :: at':您无法分配给常量。构造函数只需将 D 分配为参数。

D 移至全局范围可解决该错误,但这当然不是首选。这使我想到两个问题:

  1. 错误的根源是什么,可以解决吗?
  2. 是否有更好的方法将变量传递到Functor的作用域内?

关于第二点,为清楚起见,应注意函子将在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); }; 中使用,因此不能将其他变量作为参数传递。

1 个答案:

答案 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(这意味着没有任何内容,因为无法重新分配引用),而不是引用的内容。