gpt4 book ai didi

c - 包括导致结构别名不可见?

转载 作者:行者123 更新时间:2023-11-30 17:26:44 25 4
gpt4 key购买 nike

在我的 C 项目中,我有一个带有结构声明(带有别名)的头文件和一个带有接受该结构作为参数的函数的头文件(使用别名)。我在函数中收到错误expected ')' before '*' token。通过研究,我认为这表明别名在函数的 namespace 中不可见。我有一个相当复杂的 include 网络,我认为这可能是导致此问题的原因。这是一个简化的示例。

结构体声明头:

#ifndef STRUCTHEADER_H_
#define STRUCTHEADER_H_
#endif /* STRUCTHEADER_H_ */

#ifndef STRUCTFUNCTIONS_H_
#include "structFunctions.h"
#endif


struct myStruct{

};

typedef struct myStruct mys;

结构体函数头:

#ifndef STRUCTFUNCTIONS_H_
#define STRUCTFUNCTIONS_H_
#endif /* STRUCTFUNCTIONS_H_ */

#ifndef STRUCTHEADER_H_
#include "structHeader.h"
#endif

void func(mys* s);

main.c:

#ifndef STRUCTHEADER_H_
#include "structHeader.h"
#endif

int main(int argc, char* argv[]){
return 0;
}

但是,当我将 main.c 更改为:

#ifndef STRUCTFUNCTIONS_H_
#include "structFunctions.h"
#endif

int main(int argc, char* argv[]){
return 0;
}

错误消失。我使用 include 是否错误?

最佳答案

您需要更改structHeader.h,以便它在包含structFunctions.h之前声明结构,因为函数定义需要引用别名。在 C 中,您只能引用先前已声明的名称。

#ifndef STRUCTHEADER_H_
#define STRUCTHEADER_H_
#endif /* STRUCTHEADER_H_ */

struct myStruct{

};
typedef struct myStruct mys;

#ifndef STRUCTFUNCTIONS_H_
#include "structFunctions.h"
#endif

关于c - 包括导致结构别名不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26665630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com