0

この実装で多くのエラーが発生します。

typedef struct EmployeeStruct
{
    char lastName[MAX_LENGTH];
    char firstName[MAX_LENGTH];
    int employeeNumber;  // Holds the employee's ID. This value is
                             // equal to the number of employees
    struct EmployeeStruct *Next;  // Pointer to the next most recently hired Employee
}Employee;

この構造体へのポインターを返す関数を作成しようとすると、問題が発生します。エラーは malloc 呼び出しで発生し、「new」が正しく宣言されないため、この関数のすべての行でエラーが発生します。

Employee* hireEmployee(Employee tail, char lastName[MAX_LENGTH], char firstName[MAX_LENGTH])
{
    struct Employee *new = (Employee*)malloc(sizeof(Employee));
    new.lastName = lastName;
    new.firstName = firstName;
    new.next = tail;
    tail.next = new;
    new.employeeNumber = employeeCount;

    return tail;
}

ここにエラーのリストがあります。助けてくれてありがとう!

lab6.c:19: warning: initialization from incompatible pointer type
lab6.c:20: error: request for member ‘lastName’ in something not a structure or union
lab6.c:21: error: request for member ‘firstName’ in something not a structure or union
lab6.c:22: error: request for member ‘next’ in something not a structure or union
lab6.c:23: error: ‘Employee’ has no member named ‘next’
lab6.c:24: error: request for member ‘employeeNumber’ in something not a structure or union
lab6.c:26: error: incompatible types in return
4

2 に答える 2

4

ここには、いくつかの異なる問題があります。

->構造体へのポインターのメンバーにアクセス するには、ポインター逆参照演算子を使用する必要があります。
次に、strcpycharを使用して配列 に割り当てる必要があります。
リンクされたリストでループを回避する必要があります(とを として互いにポイントするように設定newしていました)。明らかな修正は、 new に設定することです。これを反映するために、呼び出しコードを更新する必要がある場合があります。 最後に、 Really finally, should beからの return をキャストしないでください。または、構造体定義で大文字と小文字を変更できます。tailnextnewtail
malloc
nextNext

Employee *new = malloc(sizeof(Employee));
strcpy(new->lastName, lastName);
strcpy(new->firstName, firstName);
new->Next = NULL;
tail->Next = new;
new->employeeNumber = employeeCount;
于 2013-10-25T21:29:34.040 に答える
0

ここにはいくつかのことがあります。
1) Employee は既に typedef であるため、malloc ステートメントで struct を使用する必要はありません。
2) new は構造体へのポインタです。したがって、ポインターを介して構造体のオブジェクトにアクセスする方法は、StructPointer->StructObject または *(StructPointer).StructObject
3) のいずれかです。tail を next に割り当てようとしていますが、tail を構造体オブジェクトとして渡しています。StructPointer でなければなりません。4) strcpy を使用して文字配列をコピーする必要があります。

于 2013-10-28T10:00:47.040 に答える