标题出现问题。
我有一个标题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
来解决此问题,但这只会给我带来更多错误。我想知道如何定义一个在头文件中包含结构的函数?
答案 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