定义一个在C头中传递结构的函数

时间:2015-02-20 23:18:11

标签: c struct header

标题出现问题。 我有一个标题data.h,其中包含typedef struct newPerson的结构信息。

我的来源data.h中使用了menu.c。在menu.c中,我有一个函数void addStudentRecord(newPerson pers)。 代码编译和工作就像想要的那样。

但是,我需要将所有功能添加到menu.h标题中。当我将void addStudentRecord(newPerson pers);添加到menu.h时,我收到此错误unknown type name ‘newPerson’

我尝试通过添加#include "data.h来解决此问题,但这只会给我带来更多错误。我想知道如何定义一个在头文件中包含结构的函数?

2 个答案:

答案 0 :(得分:2)

您可以将指向不完整结构类型的指针传递给函数,但是如果要传递结构的副本,则它必须是完整类型。也就是说,您必须能够看到完整的struct structname { ... }定义才能传递结构的副本。

data.h中定义的类型似乎是一个不完整的类型,因此您不能使用它来声明需要结构副本的函数。但是你可能希望函数接受一个指向结构的指针。

另见:

答案 1 :(得分:0)

听起来你需要include guards。包含防护可防止多次包含头文件。

例如,如果您的menu.h包含data.h,并且menu.c包含data.h menu.h ,然后data.h中的所有内容都包含两次,这会导致各种错误。

通过添加如下所示的包含警示,您可以保证data.h的正文仅包含一次

// data.h

#ifndef DATA_H
#define DATA_H

// the rest of data.h goes here

#endif /* DATA_H */

某些编译器允许您使用#pragma once执行相同的操作

// data.h

#pragma once

// the rest of data.h goes here