0

私は混乱しています!動的リンクリストを作成しようとしており、「malloc」関数でヘッダーを割り当てたい。以下の私のコードから、コンパイラは2つのエラーを出します:

in main: [Error] node' undeclared (first use in this function) and **In functionnewnode':** [Error] `node' undeclared (この関数で最初に使用)

#include <stdio.h>
#include <stdlib.h>

struct node{
    int a,b,c,d;
    struct node *next;
};

struct node * newnode(int, int, int, int);

int main(){
    struct node *header;
    header=(struct node *)malloc(sizeof(node));
    int a,b,c,d;
    a=11;
    b=2;
    c=4;
    d=5;
    header->next=newnode(a,b,c,d);
    printf("\n\n");
    system("PAUSE");
    return 0;
}

struct node * newnode(int aa, int bb, int cc, int dd)
{
    struct node *temp;
    temp=(struct node*)malloc(sizeof(node));
    temp->a =aa;
    temp->b =bb;
    temp->c =cc;
    temp->d =dd;
    temp->next=NULL;
    return temp;
}

アドバイスをいただければ幸いです。ありがとう!

4

3 に答える 3

2

タイプはありませんnode。タイプがあり、それをオペレーターstruct nodeに渡す必要があります。sizeof

于 2012-12-22T22:41:06.660 に答える
1

まず、@ icepackがすでに述べたように、タイプの名前は。struct nodeではなく、nodeです。したがって、sizeof(node)コンパイルしません。struct node。を使用した2つのスポットを除いて、コード内のあらゆる場所で細心の注意を払って使用しましsizeofた。

次に、

T *p = malloc(n * sizeof *p); /* to allocate an array of n elements */

メモリ割り当てのイディオム。たとえばあなたの場合

temp = malloc(sizeof *temp);

つまり、型名ではなく、式での結果をキャストせず、使用するmallocことを好みます。タイプ名は宣言に属します。コードの残りの部分は、可能な限りタイプに依存しないようにする必要があります。sizeof

于 2012-12-22T22:45:12.560 に答える
1

以前の回答で述べたようstruct nodeに、構造を参照するときに使用する必要があります。

ただし、宣言型の名前ノードを使用するだけの場合は、次のように実行できます。

typedef struct _node{
    int a,b,c,d;
    struct _node *next;
}  node;

structここでは、参照する前に使用する必要はありません。node

編集:間違った構文

于 2012-12-22T22:46:33.653 に答える