结构函数指针错误

时间:2016-11-03 02:35:51

标签: c pointers struct function-pointers

在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

我使用'已经多次使用结构的数据成员。'运算符,但我从未使用函数指针。这里需要什么不同的东西吗?

1 个答案:

答案 0 :(得分:1)

它应该以符号方式工作,但由于您已将结构定义为const,因此您只能对其进行初始化,而不是在初始化后分配给它。

但是,这与你得到的错误不同。它表现得有点好像data不是一个简单的单词 - 好像它是宏扩展成奇怪的东西,或沿着这些行的东西。结构类型是在头文件中声明的,不是吗?它之后确实有一个分号,不是吗?

  

是的,const不是问题。我试过删除它,只是为了得到同样的错误。知道如何解决你正在谈论的最后一部分吗?

在某个级别,没有足够的代码 - 你没有提供MCVE(Minimal, Complete, and Verifiable Example) - 我们没有代码可以编译并看到你看到的错误(或类似的东西)。我们需要你的标题和一组显示问题的最小代码。

你正在函数内写data.compute = …,不是吗? (嗯:我怀疑不是 - 你必须使用初始化… data = { … };或在一个函数内移动赋值。)

  

不,它不在功能中。你能否详细说明… data = { … };?我不认识那种语法;第一个代表什么?

第一个static const struct my_struct,但我感到懒得去复制'''''糊涂。所以,你需要:

static const struct my_struct data = { .compute = sin };

或类似内容(假设您包含<math.h>以提供sin的声明 - 或使用您已声明或已定义的其他函数)。如果您在没有C99或更高版本的编译器的情况下被卡住了):

static const struct my_struct data = { sin };

您无法在功能之外编写作业 - 这是您的问题。您必须使用初始值设定项,或在函数内编写赋值并删除const