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

C++;错误:表达式不能用作函数 我几年前在C++写了一个程序,我用了很多。这个程序使用了一个名为LTENSOR的库,我只是使用它,我并不完全了解那里发生的一切。2天前,在新安装了Ubuntu 18.04之后,我安装了最新版本的gcc编译器(Ubuntu 7.5.0-3ubuntu1~18.04)。现在,当我运行我运行了几年的同一个程序时,我得到了以下错误:,c++,gcc,C++,Gcc,在/home/alex/Documents/My Soilab/Soillab/ltensor//base/Array_base.h:29:0中包含的文件中, from/home/alex/Documents/My-Soilab/ltensor/ltensor.h:32, from/home/alex/Documents/My-Soilab/Soillab/Soillab.cpp:14: /home/alex/Documents/My Soilab/Soillab/ltensor//base/。

在/home/alex/Documents/My Soilab/Soillab/ltensor//base/Array_base.h:29:0中包含的文件中, from/home/alex/Documents/My-Soilab/ltensor/ltensor.h:32, from/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(排序,dim-1,秩)); ^ [在0.9秒内完成,退出代码为1] [shell_cmd:g++“/home/alex/Documents/My-Soilab/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;
    }
我不明白为什么我会犯这个错误。谢谢。

这句冒犯的话

gsize= (dim==0?0: stride(getPos(ordering,dim-1,rank) )) ;
似乎起源于

但是在第84行,
stride
被声明为
long*stride


因此,
stride
是一个指针,而不是一个函数。

这个问题中显示的代码不符合stackoverflow.com对a的要求,因此,这里的任何人都不可能最终确定问题,最多只能猜测。必须对该问题进行编辑,以显示一个最小的示例,不超过一页或两页的代码(“最小”部分),其他人可以完全按照所示剪切/粘贴、编译、运行和再现所描述的问题(“可再现”部分)(这包括任何辅助信息,如程序输入)。有关更多信息,请参阅。与其初始化为
0
,然后立即重新分配,不如
long gsize=…
,然后完成它?更好的方法是:跳过变量,只返回展开的计算结果。@SamVarshavchik我将尝试隔离此函数并编辑问题。这并不容易,因为这是我自己没有写过的图书馆的一部分,但你是对的,我必须试试。@tadman谢谢你的回答。然而,我得到了同样的错误信息。当你遇到一个你不理解的问题时,首先要尝试的是清理你的代码,希望能使错误更加明显。