C ++,表达式不能是一个函数

时间:2016-07-02 13:37:45

标签: c++ eigen

Expression can not be a function,但我的表达式不是函数,而是变量。

显示我的代码。

class Data {

public:
    Data(int rows, int partid, vector<MatrixXd*> * res, MatrixXd * a)
    {
        _rows = rows;
        _partid = partid;
        _res = res;
        _a = a;
    }

    int _rows;
    int _partid;
    vector<MatrixXd*> * _res;
    MatrixXd * _a;
};

[snippet]    

void * partitionFunc(void * arg)
{
    Data * data = (Data *)arg;
    MatrixXd * m;
    int dim = data->_rows / data->_res->size();
    for (int i = 0; i < dim; i ++)
    {
        for (int j = 0; j < dim; j ++)
        {
            m = (*(data->_res))[data->_partid];
            (*m)(i, j) = data->_a(dim*data->_partid+i, dim*data->_partid+j);
        }
    }
    pthread_exit(NULL);
}

编译代码时返回

In file included from main.cpp:2:0:
solutions.h: In function ‘void* partitionFunc(void*)’:
solutions.h:86:75: error: expression cannot be used as a function
             (*m)(i, j) = data->_a(dim*data->_partid+i, dim*data->_partid+j);
                                                                           ^ 
solutions.h: In function ‘void* partitionFunc(void*)’:
solutions.h:86:75: error: expression cannot be used as a function
             (*m)(i, j) = data->_a(dim*data->_partid+i, dim*data->_partid+j);

但是m是一个矩阵,(*m)(i, j)是获取第i + 1行,第j + 1列的值。

我应该如何避免这种错误。

2 个答案:

答案 0 :(得分:0)

我甚至没有看到你在矩阵中添加访问者的方式。另外,除非你重载了()运算符,否则使用括号是一个函数调用。

无法访问数据。您试图将m用作函数或类()运算符重载。

答案 1 :(得分:0)

这意味着data->_a不起作用(请注意^的位置)。您应该data->_am执行相同的操作,即使用operator*,因为它是指向MatrixXd的指针。

(*m)(i, j) = (*data->_a)(dim*data->_partid+i, dim*data->_partid+j);