[英]How do you declare a struct in a header file and define it in the .c file
我只需要一個簡單的直接答案,但我無法在線獲得任何答案。
為什么我在person.h
文件中寫入以下內容時會出現錯誤:
typedef struct Person Person_T;
以下是person.c
文件:
typedef struct Person
{
char *name;
unsigned int age;
} Person_T;
編輯:作為參考,這是我的main.c
文件:
#include <stdio.h>
#include "person.h"
int main()
{
Person_T sam = { "Sam", 24 };
printf("%s, %d\n", sam.name, same.age);
return 0;
}
錯誤是variable has incomplete type Person_T (aka 'struct Person')
還有兩個相關的問題:
extern struct Person Person;
或類似的東西?對不起,我是新人。
在包含 person.h 的 main.c 文件中,類型struct Person
已聲明但未定義。 因此,您不能在 main.c 中創建此類型的變量,盡管您可以創建指向它的指針。 在這種情況下, person.c 可以包含在struct Person
上工作的函數並返回指向其中的指針,因此其他文件中的函數不需要知道細節。
如果希望這個文件和其他文件能夠使用struct Person
的字段,則需要將 struct 的定義移動到 header 文件中。
在 header 文件中:
typedef struct Person Person_T;
在源文件中(沒有 typedef :):
struct Person {
char *name;
unsigned int age;
};
int main()
{
Person_T sam = { "Sam", 24 };
printf("%s, %d\n", sam.name, same.age);
return 0;
}
現在,如果您想在 header 文件中聲明 function,那么您必須使用指向 Person_T 的指針,例如
int foo(Person_T *person);
我只是讓它工作。
我使用了@dbush 的建議。
在我的 header 文件中,我添加了與我的結構交互所需的所有功能:
typedef struct Person Person_T;
Person_T* create_person(char *name, unsigned int age);
char* get_name(Person_T *person);
unsigned int get_age(Person_T *person);
然后在我的.c
文件中實現這些。
最后,我需要做的就是使用這些API與我的struct
進行交互。 我覺得這是確保安全和優雅的最佳設計。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.