【发布时间】:2017-03-16 12:48:29
【问题描述】:
在 struct my_struct 中,有一个名为 compute() 的函数指针。它是这样声明的:
struct my_struct
{
double (*compute) (double input);
}
在一个单独的文件中,我初始化了该结构,以便我可以将该函数指向另一个。
static const struct my_struct data;
data.compute = ......
问题是,无论我将函数指针设置为什么,data.compute 都会出现以下错误:
error: expected '=', ',', ';', 'asm', or '__attribute__' before '.' token
我已经多次使用 '.' 来使用结构的数据成员。运算符,但我从未使用过函数指针。这里有什么不同的需要吗?
【问题讨论】:
-
它应该在符号上工作,但由于您已将结构定义为
const,因此您只能对其进行初始化,而不能在初始化后分配给它。但是,这与您遇到的错误不同。它的表现好像data不是一个简单的词——好像它是宏扩展成奇怪的东西,或者类似的东西。结构类型在标头中声明,不是吗?在}之后确实有一个分号,不是吗? -
是的,const 不是问题。我试过删除它,只是得到同样的错误。知道如何解决您所说的最后一部分吗?
-
没有足够的代码——你没有提供一个 MCVE (minimal reproducible example)——我们没有代码可以编译并看到你看到的错误(或类似的东西)。我们需要您的标头和显示问题的最少代码集。您正在函数内编写
data.compute = …,不是吗? (嗯:我怀疑不是 - 您必须使用初始化… data = { … };或将赋值移动到函数中。) -
不,它不在函数中。您能否详细说明... data = { ... };?我不认识那个语法,第一个 ... 代表什么?
-
全局变量是在任何函数之外定义的,并且没有关键字
static。在定义全局变量之前可以有函数;您可以在它之前定义其他变量。您可以将全局变量定义为源文件中的最后一件事——但是您不能在同一个源文件中引用它,除非在您尝试引用它之前有一个extern声明。在初始化器中提到它之前,必须告诉编译器distance是一个函数。无论如何,编译器必须知道函数。
标签: c pointers struct function-pointers