C ++错误:表达式不能用作函数

时间:2020-04-25 21:09:17

标签: c++ gcc

几年前,我用C ++编写了一个程序,并且使用了很多程序。该程序使用了一个名为LTENSOR的库,我只是在使用它,所以我不完全了解那里发生的一切。 2天前全新安装Ubuntu 18.04之后,我安装了最新版本的gcc编译器(Ubuntu 7.5.0-3ubuntu1〜18.04)。现在,当我运行几年的同一程序时,出现以下错误:

在/ home / alex / Documents / My Soilab / Soillab / ltensor /./ base / Array_base.h:29:0中包含的文件中, 来自/ home / alex / Documents / My Soilab / Soillab / ltensor / LTensor.h:32, 从/ home / alex / Documents / My Soilab / Soillab / Soillab.cpp:14: / home / alex / Documents / My Soilab / Soillab / ltensor /./ base /../ storage / storage.h:在成员函数“ long int GenericStorage :: getBeginAddress(int,int)”中: / home / alex / Documents / My Soilab / Soillab / ltensor /./ base /../ storage / storage.h:207:62:错误:表达式不能用作函数 gsize =(dim == 0?0:stride(getPos(ordering,dim-1,rank))); ^ [在0.9秒内完成,退出代码为1] [shell_cmd:g ++“ / home / alex / Documents / My Soilab / Soillab / Soillab.cpp” -o“ / home / alex / Documents / My Soilab / Soillab / Soillab”] [dir:/ home / alex / Documents / My Soilab / Soillab] [路径:/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / games:/ usr / local / games:/ snap / bin]

似乎来自下面的代码

long getBeginAddress(int offset,int dim){

    long gsize=0;
    gsize= (dim==0?0: stride(getPos(ordering,dim-1,rank) )) ;
    return gsize+offset;
    }

我不明白为什么会出现此错误。谢谢。

1 个答案:

答案 0 :(得分:2)

违规行

gsize= (dim==0?0: stride(getPos(ordering,dim-1,rank) )) ;

似乎源自https://github.com/lromor/ltensor/blob/master/ltensor/storage/storage.h#L207

但是在第84行上,stride被声明为long* stridehttps://github.com/lromor/ltensor/blob/master/ltensor/storage/storage.h#L84

所以stride是一个指针,而不是一个函数。