0

次のコードをコンパイルしようとすると、エラーが発生します

test.c: In function 'main':
test.c:16: error: incompatible types in assignment

コードは..

#include <stdio.h>
#include <ctype.h>
#include <string.h>

typedef struct {
    char name[20];
    struct planet* next;
} planet;


int main(int argc, char *argv[])
{
    planet *p, *start, *first, *second, *third;

    strcpy(start->name, "Suthan");
    start->next = *first;

}
4

4 に答える 4

3

1) ポインタにメモリを割り当てます。

planet *start, *first; these are uninitialized pointers.

start->next // that's dereferencing an uninitialized pointer.

2) start->next (惑星へのポインター) を defered pointer に設定していますfirst。それがあなたのエラーの根本です。

start->next = *first;  // should be  = first;

3) typedef 名を移動して、表示されていた警告を取り除きます。

typedef struct planet{
   char name[20];
   struct planet* next;
};
于 2012-12-10T19:54:48.703 に答える
1

( ) のインスタンスをplanet( *first) へのポインタに割り当てようとしているためです。planetstart->next

代わりにこれを試してください:

start->next = first;

しかし、私はあなたの宣言についても疑問に思っていますplanet. これは役に立ちますか?

typedef struct _planet {
    char name[20];
    struct _planet* next;
} planet;
于 2012-12-10T19:55:27.340 に答える
0

あなたはあなたの構造体を間違ってやったと思います

typedef struct _planet {
    char name[20];
    struct _planet* next;
} planet;

次のようにする必要があります。

typedef struct planet {
char name[20];
struct planet* next;
}
于 2012-12-10T20:05:54.100 に答える
0

自己参照構造体のこの側面につまずいたことを覚えています。

typedef struct {
    char name[20];
    struct planet* next; /* <-- the trouble is here */
} planet;

typedef 定義の途中にある struct 定義の途中で、コンパイラは a がどのようにstruct planet見えるかを知りませんが、それへのポインタを定義できるようにします。コンパイラは、逆参照するまで、それがどのように見えるかを実際に知る必要はありません*next。本体にたどり着くまでにmain()、コンパイラに a が何であるかをまだ伝えていません。struct planet呼び出された型だけplanetがたまたま名前のない構造体になっています。

次のアプローチを検討してください。

struct foo {
    int bar;
};

typedef struct foo foo_type;

struct foo bar;
foo_type baz;

これは、構造体fooの名前が で、定義された型の名前がであることを示していfoo_typeます。次のように組み合わせることができます。

typedef struct foo {
    int bar;
} foo_type;

インライン構造体定義にダミー名を追加することで、コンパイラの警告を解決できます。

typedef struct planet_struct {
    char name[20];
    struct planet_struct* next;
} planet;

他の人が指摘したメモリ割り当ての問題にも対処する必要がありますが、これは実際には尋ねなかった質問に答えます。

于 2012-12-10T20:15:36.723 に答える