2011-10-20 93 views
0

這就是我想要做的事:誤差函數返回一個結構

我一直在努力,我已創建一個結構(在主硬編碼)代碼,然後我想爲兩個結構的malloc空間(試着使用功能)。然後將第一個結構中的所有數據複製到第二個結構並打印新結構。

發生的錯誤是: 我不明白這個錯誤的含義。

pointer.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token 
pointer.c:13: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token 



#include <stdio.h> 
#include <stdlib.h> 
#include "pointer.h" 
int rec = 0; 

線7

struct emp *create(int record){ 
emp *new_employees = malloc(sizeof(info) * (record+1)); 

return new_employees; 
} 

線13

struct emp *copy(emp *data, int record){ 
emp *new_employee = create(record+1); 
int i; 
for(i = 0; i<record;i++){ 
    new_employee.first = data.first; 
    new_employee.last = data.last; 
    new_employee.start_date = data.start_date; 
    new_employess.sal = data.sal; 
    data++; 
} 
return new_employee; 
} 


int main(void){ 
struct info employees; 
employees.first = "FIRST"; 
employees.last = "LAST"; 
employees.start_date = "June-20th-2006"; 
employees.sal = 55555.55; 
rec = rec+1; 



} 

頭文件:

#include <string.h> 
struct info { 
char *first; 
char *last; 
char *start_date; 
float sal; 
} emp; 

回答

2

info不是一個類型,並且emp只是類型的可變。無論是添加一個typedef(如果你想emp作爲一個類型):

typedef struct info { 
    char *first; 
    char *last; 
    char *start_date; 
    float sal; 
} emp; 

...或添加struct關鍵字。

struct info *create(int record); 
struct info *copy(emp *data, int record); 
+0

是的,但'信息'是類型,而不是'emp' – lkuty

+0

@LudovicKuty是的,困惑它。我更新了答案,但它不會顯示爲編輯... – sidyll

0

emp是一個變量,info是類型。所以你應該使用info而不是emp在你的功能和身體的原型。

與其他人一樣,缺少typedef或者struct info而不是emp。我錯過了那一個:)

恕我直言,這些是你的代碼中兩個不同的錯誤。

0
emp *new_employees = malloc(sizeof(info) * (record+1)); 

類型的名稱是struct info,不info

但更好的方式來寫是:

EMP * NEW_EMPLOYEES = malloc的((記錄+ 1)* *的sizeof EMP);

+0

另一篇文章是說,如果你做了什麼,我應該 struct info * new_employees = malloc(sizeof(info)*(record + 1)); – jenglee

+0

@jenglee:'sizeof(info)'只有當你聲明'info'是一個typedef時纔會工作。如果你喜歡,你可以這樣做,或者你可以通過它的原始名稱'struct info'來引用類型。但'sizeof * emp'更強大;它不會冒險使用錯誤的類型名稱,並且如果稍後更改'emp'的類型則不需要更改。 –

0

你必須定義的功能是這樣的:

struct emp *create() 
struct emp *copy() 

或者使用的typedef定義的結構作爲數據類型。

+0

你是說我應該在頭文件中定義這個 – jenglee

+0

當你定義函數。他們必須返回_struct emp_而不是_emp_ – vicentazo