当我尝试为 x_dev、y_dev 和 pearson 赋值时,for 循环中出现了这个错误。据我所知,它们都应该是可修改的。谁能看出我哪里出错了?
class LoopBody
{
double *const x_data;
double *const y_data;
double const x_mean;
double const y_mean;
double x_dev;
double y_dev;
double pearson;
public:
LoopBody(double *x, double *y, double xmean, double ymean, double xdev, double ydev, double pear)
: x_data(x), y_data(y), x_mean(xmean), y_mean(ymean), x_dev(xdev), y_dev(ydev), pearson(pear) {}
void operator() (const blocked_range<size_t> &r) const {
for(size_t i = r.begin(); i != r.end(); i++)
{
double x_temp = x_data[i] - x_mean;
double y_temp = y_data[i] - y_mean;
x_dev += x_temp * x_temp;
y_dev += y_temp * y_temp;
pearson += x_temp * y_temp;
}
}
};
按照@Bathsheba 的建议,我已经克服了这些问题。但是,当运行 parallel_for 时,运算符会运行,但永远不会进入 for 循环。
这是我调用 parallel_for 的地方:
parallel_for(blocked_range<size_t>(0,n), LoopBody(x, y, x_mean, y_mean, x_dev, y_dev, pearson), auto_partitioner());
最佳答案
()
运算符被标记为 const
,并且您正在尝试修改类成员数据(例如 x_dev
、y_dev
和 人
)。这是不允许的,这就是您收到编译时错误的原因。
您可能想从方法中删除 const
。
或者,您可以将要修改的成员数据标记为可变
,但这不是首选的解决方案,因为它会使代码变得脆弱、难以阅读并且会对多线程造成严重破坏。
关于c++ - 错误 : Expression must be a modifiable lvalue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22323917/