c++中,表达式不能是函数

C++, expression can not be a function

本文关键字:函数 不能 表达式 c++      更新时间:2023-10-16

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的值

表示data->_a不起作用(注意^的位置)。你应该做同样的事情data->_a作为m,即使用operator*,因为它是指向MatrixXd的指针。

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

我甚至没有看到您为矩阵添加访问器的方式。另外,使用括号是函数调用,除非重载()操作符。

没有办法访问数据。

您正在尝试使用m作为一个函数或一个类,其中()操作符重载。