2014-03-30 28 views
0

我有以下示例代碼:解引用指針不完全型當結構指針的存取部件

person.h

typedef struct person Person; 
Person* makePerson(char* n, int i); 

person.c

#include "person.h" 
struct person { 
    char* name; 
    int age; 
}; 

Person* makePerson(char* n, int i) { 
    Person person; 
    person.name = n; 
    person.age = i; 
    return &person; 
} 

main.c中

#include <stdio.h> 
#include "person.h" 
int main() { 
    Person* pp = makePerson("Mark",24); 
    printf("Person's name : %s\t Person's age : %d\n",pp->name, pp->age); 
} 

我是g當我試圖打印出對應於Person指針的名稱和年齡成員時,設置「解除指向不完整類型指針」的錯誤,我使用gcc-std = c99 -o main main.c person .c編譯

任何人都可以給我一些指導?由於

+4

是的,您正在嘗試訪問main.c中的'name'和'age',但它不知道任何關於它們的內容,因爲定義在'person.c'中。您應該將結構定義移動到頭文件。 –

+2

永遠不會將本地變量指針返回給其調用者:return&person; –

+1

僅供參考,您應該在makePerson中使用malloc並返回指針。如果你只是聲明局部變量,它將在makePerson函數調用結束時消失,這會使你的指針指向一個不安全的內存,如果你定義了一個struct標記和一個類型名稱,那麼使用 – marcadian

回答

0

這條線:

的printf( 「人的名稱:%s \ t人的年齡:%d \ n」,PP->名稱,PP->年齡);

解引用person結構。但是,您的.h文件僅包含前向聲明。

要麼將​​打印功能放入person.c,要麼將完整的struct定義移動到person.h

+0

謝謝,問題在評論中得到解決,但你是第一個真正把答案 – Rohan

相關問題