有人可以帮我解决下面代码中显示的错误吗?
#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:error:数组必须使用大括号括起初始化器初始化
答案 0 :(得分:4)
您不能在C中初始化另一个数组(就像数组赋值不起作用一样)。试试这个:
struct pr params = { { &GX00, &GX00, &GX22 } };
这是另一种方法,使用自定义构造函数:http://ideone.com/blVBox
答案 1 :(得分:0)
问题是,“读取”fG(就像你在struct pr params ={ fG };
中所做的那样)不会给你一个数组的副本,而是一个数组的第一个地址的副本。它与以下情况相当:
char buffer[200] = "Test";
char *p = buffer;
在这种情况下,p只存储缓冲区的第一个地址。要在另一方面初始化结构,您需要告诉编译器每个元素应该存储什么。因此,结构的正确初始化是:
struct pr params ={
{ GX00, GX00, GX22 }
};
此外,我建议您输入函数签名,而不是一遍又一遍地复制它。它使代码更具可读性:
typedef double (*tCallback) (double, double, double, double*);
struct pr {
tCallback fG[3];
}