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列的值。
我应该如何避免这种错误。
答案 0 :(得分:0)
我甚至没有看到你在矩阵中添加访问者的方式。另外,除非你重载了()运算符,否则使用括号是一个函数调用。
无法访问数据。您试图将m用作函数或类()运算符重载。
答案 1 :(得分:0)
这意味着data->_a
不起作用(请注意^
的位置)。您应该data->_a
对m
执行相同的操作,即使用operator*
,因为它是指向MatrixXd
的指针。
(*m)(i, j) = (*data->_a)(dim*data->_partid+i, dim*data->_partid+j);