1
typedef struct Item{

  int i;
  int j;    
  void (*fooprint)(item*);

}item;

void fooprint(item *it){
  printf("%d\n",it.i);
}


int main(){

  item myitem;
  myitem.i=10;
  myitem.j=20;
  myitem.fooprint = fooprint;

  myitem.fooprint(&myitem);
  return 0;
}

此代码在 void ( footprint)(item )处给出错误。“错误应该是 ')' 在 '*' 标记之前”。我错过了什么吗?当我在不使用指向结构的指针的情况下做同样的事情时是有效的。示例:void (*footprint)(item)

4

2 回答 2

7

使用时类型item尚不清楚。您可以通过前向声明来解决这个问题。

typedef struct Item item;
struct Item {
    int i;
    int j;
    void (*fooprint)(item*);
};

另一种可能性是不使用typedef来定义成员:

typedef struct Item {
    int i;
    int j;
    void (*fooprint)(struct Item *);
} item;
于 2013-11-11T00:33:14.540 回答
5

我不确定你为什么会遇到特定的错误——我得到的错误是“错误:未知类型名称‘项目’”。这是因为 typedef 还没有“发生”,而 C 不知道类型item指的是什么。struct Item代替item那里使用。

(另外,it.iprintf应该是it->i)。

于 2013-11-11T00:37:09.697 回答