C 函数指针

C 函数指针,c,C,在我的A.h文件中 Node RemoveString(Node (*)(char,Node)); Node Minimum(char, Node); 在我的A.c文件中 Node Minimum(char type, Node node) {......} Node RemoveString(Node(*Minimum)(char, Node)) {...} 在我的B.h文件中 void Test_Function(Node (*)(char,Node)); 在我的B.c文件中 v


在我的A.h文件中

Node RemoveString(Node (*)(char,Node));
Node Minimum(char, Node);

在我的A.c文件中

Node Minimum(char type, Node node) {......}
Node RemoveString(Node(*Minimum)(char, Node)) {...}

在我的B.h文件中

void Test_Function(Node (*)(char,Node));

在我的B.c文件中

void Test_Function(Node(*Minimum)(char, Node)) {...}

在我的主要演讲中

Test_Function(Node(*Minimum)(char, Node));//This line has error.

节点在A.h中定义
B.h包括“A.h”
主体c包括“B.h”


编译器抱怨该错误:“节点”之前应有表达式

有人能告诉我为什么吗?在这种情况下我做错了什么?

你给这个
c
加了标签,所以我认为你使用的是c编译器(不是c++)--对吗?在这种情况下,您需要在每个声明中编写
struct Node
,或者使用
typedef
您标记了这个
c
,所以我认为您使用的是c编译器(不是c++)--对吗?在这种情况下,您需要在每个声明中写入
struct Node
,或者在调用函数时使用
typedef

,您只需使用函数的名称,而不是再次使用完整的定义。所以这一行:

Test_Function(Node(*Minimum)(char, Node));
应该是:

Test_Function(&Minimum);

当然,您还应该确保在此语句之前定义了函数Test_Function和Minimum(即包含的文件)。

调用函数时,只需使用函数名,而不是再次使用完整的定义。所以这一行:

Test_Function(Node(*Minimum)(char, Node));
应该是:

Test_Function(&Minimum);

当然,您还应该确保在此语句之前定义了函数Test_Function和Minimum(即包含的文件)。

作为
Test_Function
参数使用的表达式是类型,而不是函数指针。函数指针只是函数的名称:

Test_Function(Minimum);

用作
Test\u函数
参数的表达式是类型,而不是函数指针。函数指针只是函数的名称:

Test_Function(Minimum);

尝试
Test_函数(&最小值)尝试<代码>测试功能(&最小值)
如果您愿意,甚至不需要
&
。如果我使用这个“Test_函数(&Minimum);”而不是这个“Test_函数(Minimum);”Hmmm。。。真奇怪!我想两个都可以。你在用哪个编译器?!我只是制作了一个简单的示例,并用GCC编译了它,这两个表达式都适用于我!虽然我使用的是Linux/Ubuntu,但我怀疑这与GCC有关。版本差异也是如此。我使用的是GCC版本4.4.5:“GCC(Ubuntu/Linaro 4.4.4-14ubuntu5)4.4.5”
&
如果您愿意,甚至不需要。如果我使用这个“Test_函数(&Minimum);”而不是这个“Test_函数(Minimum);“hmm…”。。。真奇怪!我想两个都可以。你在用哪个编译器?!我只是制作了一个简单的示例,并用GCC编译了它,这两个表达式都适用于我!虽然我使用的是Linux/Ubuntu,但我怀疑这与GCC有关。版本差异也是如此。我使用的是GCC版本4.4.5:“GCC(Ubuntu/Linaro 4.4.4-14ubuntu5)4.4.5”在致幻剂实验室运行自来水。在致幻剂实验室运行自来水。