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。
我该如何避免这样的错误。
发布于 2016-07-02 13:42:38
这意味着data->_a
不是函数(注意^
的位置)。您应该对data->_a
执行与m
相同的操作,即使用operator*
,因为它是指向MatrixXd
的指针。
(*m)(i, j) = (*data->_a)(dim*data->_partid+i, dim*data->_partid+j);
发布于 2016-07-02 13:41:36
我甚至看不出你在矩阵中添加一个访问器的方式。此外,除非重载()运算符,否则使用括号是一个函数调用。
那里没有访问数据的方法。您正在尝试使用m作为函数或类来重载()运算符。
https://stackoverflow.com/questions/38160782
复制相似问题