我有以下示例代碼:解引用指針不完全型當結構指針的存取部件
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編譯
任何人都可以給我一些指導?由於
是的,您正在嘗試訪問main.c中的'name'和'age',但它不知道任何關於它們的內容,因爲定義在'person.c'中。您應該將結構定義移動到頭文件。 –
永遠不會將本地變量指針返回給其調用者:return&person; –
僅供參考,您應該在makePerson中使用malloc並返回指針。如果你只是聲明局部變量,它將在makePerson函數調用結束時消失,這會使你的指針指向一個不安全的內存,如果你定義了一個struct標記和一個類型名稱,那麼使用 – marcadian