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 (*フットプリント)(項目)

4

2 に答える 2

7

あなたがそれを使用するとき、タイプitemはまだわかりません。前方宣言でそれを解決できます。

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

もう 1 つの可能性は、 を使用しtypedefてメンバーを定義しないことです。

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

特定のエラーが発生する理由はわかりません。エラーは「エラー: 不明なタイプ名 'item'」でした。これは、typedef がまだ「発生」しておらず、C がその型が何itemを参照しているのかを認識していないためです。struct Itemそこの代わりに使いitemます。

(また、it.iであるprintf必要がありますit->i)。

于 2013-11-11T00:37:09.697 に答える