几年前,我用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;
}
我不明白为什么会出现此错误。谢谢。
答案 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* stride
:https://github.com/lromor/ltensor/blob/master/ltensor/storage/storage.h#L84
所以stride
是一个指针,而不是一个函数。