0

我有一个SARavesphnp()定义为类型的函数:

std::unordered_map<unsigned, std::unordered_map<unsigned, std::unordered_map<unsigned, double>>>;

但是,当我尝试返回相同类型的变量时,我收到此错误:

error: could not convert '(mat3d (*)[(long int)y2][(long int)z2])(& SARave)' from 'mat3d (*)[(long int)y2][(long int)z2] {aka std::unordered_map<unsigned int, std::unordered_map<unsigned int, std::unordered_map<unsigned int, double> > > (*)[(long int)y2][(long int)z2]}' to 'mat3d {aka std::unordered_map<unsigned int, std::unordered_map<unsigned int, std::unordered_map<unsigned int, double> > >}'

这是我的代码:

#include <unordered_map>

using mat3d = std::unordered_map<unsigned, std::unordered_map<unsigned, std::unordered_map<unsigned, double>>>;

mat3d foo(const int, const int, const int);

int main()
{

    foo(10, 10, 10);

    return 0;
}

mat3d foo(const int x2, const int y2, const int z2)
{
    mat3d SARave[x2][y2][z2];

    return SARave;
}
4

1 回答 1

1

尝试这个。在 gcc-4.7 下为我工作。

mat3d foo(const int x2, const int y2, const int z2)
{
    mat3d SARave;
    SARave[x2][y2][z2] = 0.;

    return SARave;
}

类型没有错。然而,这一行mat3d SARave[x2][y2][z2];并没有初始化变量,而是声明了一个返回 mat3d 的函数。抱歉,我现在无法确切解释原因,但»mat3d (*)[(long ...错误消息中的部分表明编译器试图将函数指针转换为 mat3d 对象,这显然失败了。

于 2013-09-10T09:45:49.550 回答