0

谁能帮我解决下面代码中显示的错误?

#include <iostream>
#include "FG.h"

struct pr { double (*fG[3]) (double, double, double, double*);};

int main()
{       


    double (*fG[3]) (double, double, double, double*);

    fG[0] = GX00;
    fG[1] = GX00;
    fG[2] = GX22;

    double prx[2] = {10, 1};
    struct pr params ={ fG };
    std::cout << params.fG[0]( 1 , 0.5 , 1, prx ) << std::endl;

    return 0;
}

编译:

$ g++ -c test.cpp 

test.cpp:在函数'int main()'中:test.cpp:15:25:错误:数组必须用大括号括起来的初始化程序初始化

4

2 回答 2

4

您不能在 C 中从另一个数组初始化一个数组(就像数组赋值不起作用一样)。试试这个:

struct pr params = { { &GX00, &GX00, &GX22 } };

这是另一种方式,使用自定义构造函数:http: //ideone.com/blVBox

于 2013-07-15T03:55:33.547 回答
0

问题是,“读取” fG(就像您在 中所做的那样struct pr params ={ fG };)不会给您数组的副本,而是给您数组第一个地址的副本。它类似于以下情况:

char  buffer[200] = "Test";
char *p = buffer;

在这种情况下 p 只存储缓冲区的第一个地址。另一方面,要初始化结构,您需要告诉编译器每个元素应该存储什么。因此,您的结构的正确初始化是:

struct pr params ={ 
    { GX00, GX00, GX22 }
};

此外,我建议您 typedef 函数签名,而不是一遍又一遍地复制它。它使代码更具可读性:

typedef double (*tCallback) (double, double, double, double*);

struct pr {
    tCallback fG[3];
}
于 2013-07-15T04:03:16.707 回答