7

私は次の構造体を持っています:

struct elem {
  int number;
  char character;
};

struct item {
  struct elem element;
};

および次の関数:

void init(struct item *wrapper) {
  assert(wrapper != NULL);
  wrapper->element = NULL;
}

item->element = NULLが得られますincompatible types in assignment。何故ですか?構造体を NULL に設定しても問題ありませんか?

4

4 に答える 4

12

CNULLでは、一般的に次のように定義されています

#define NULL ((void*)0)

これは、ポインタ値であることを意味します。この場合、ポインター ( NULL) を非ポインター値に割り当てようとしてitem::element、適切なメッセージを取得しています。elementここでポインタになることがあなたの意図のようですので、次のことを試してください

struct item {
  struct elem* element;
};
于 2012-07-10T15:12:32.223 に答える
5

NULLはポインター値でwrapper->elementあり、ポインターではないため、代入できませんNULL

于 2012-07-10T15:11:16.430 に答える
3

前の回答に加えて、NULL 構造体を作成することが理にかなっている場合があります。 http://en.wikipedia.org/wiki/Null_Object_pattern

于 2014-06-29T09:24:11.040 に答える
2
  1. 要素はポインタではないため、NULLを割り当てることはできません。
  2. main->element間違った使い方です。名前を使用して構造体の要素にアクセスすることはできません。する必要がありますwrapper->element。変数名を使用してアクセスする必要があります。
于 2012-07-10T15:14:28.840 に答える