c++ - 错误 : Expression must be a modifiable lvalue

标签 c++ tbb lvalue

当我尝试为 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_devy_dev )。这是不允许的,这就是您收到编译时错误的原因。

您可能想从方法中删除 const

或者,您可以将要修改的成员数据标记为可变,但这不是首选的解决方案,因为它会使代码变得脆弱、难以阅读并且会对多线程造成严重破坏。

关于c++ - 错误 : Expression must be a modifiable lvalue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22323917/

相关文章:

c++ - 骑士运动.... "how to output all possible moves. "

c++ - 使用智能指针变得聪明 : avoiding shared_ptr overuse

c++ - 如何为动态分配的 STL 容器设置分配器?

c++ - Reader/Writer : multiple heavy readers, 每天只写 1 次

c++ - 更多左值错误

c++ - 使用共享指针来自另一个线程的纯虚拟调用

c++ - 使用 Qt 安装程序框架创建 .msi 安装程序

c - 是否仍然值得在 OpenMP 实现上投入时间?

c++ - void* 强制转换为 char* 而不是左值?