在结构体中使用函数指针

问题描述 投票:0回答:1

我正在尝试使用结构体作为函数容器,但我无法这样做。 这是我的结构代码,别名为

methods

typedef struct {
        void (*addAtHead)(LinkedList*,int);
        void (*addAtTail)(LinkedList*,int);
        void (*remFromHead)(LinkedList*);
        void (*remFromTail)(LinkedList*);
}methods;

这里我将

methods
的指针指向相应的函数

methods LinkedListF;
LinkedListF.addAtHead = addAtH;
LinkedListF.addAtTail = addAtT;
LinkedListF.remFromHead = remFromH;
LinkedListF.remFromTail = remFromT;

预计

LinkedListF.addAtHead(LinkedList *l,int value)
函数调用会调用
addAtH
,但在编译期间,它给出了

LinkedList.c:43:12: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
   43 | LinkedListF.addAtHead = addAtH;
....and more errors

我已经验证没有丢失分号或其他错误,如果我尝试使用以下代码,它也可以正确编译

methods LinkedListF = {addAtH,addAtT,remFromH,remFromT};

有人可以解释我哪里做错了吗?

c struct function-pointers
1个回答
0
投票

您没有显示的是以下内容位于函数之外:

methods LinkedListF;
LinkedListF.addAtHead = addAtH;
LinkedListF.addAtTail = addAtT;
LinkedListF.remFromHead = remFromH;
LinkedListF.remFromTail = remFromT;

仅允许在函数之外进行声明。最后四行不是声明。

© www.soinside.com 2019 - 2024. All rights reserved.