警告:‘struct task_struct’"Declared inside parameter list will not be visible outside of this definition or declaration"
warning: ‘struct task_struct’ "Declared inside parameter list will not be visible outside of this definition or declaration"
我有如下一段代码:
文件sched.h
#ifndef __SCHED_H__
#define __SCHED_H__
#include <stats.h>
truct task_struct {
...
struct stats stat;
};
#endif
文件stats.h
#ifndef STATS_H
#define STATS_H
#include <sched.h>
struct stats
{
...
};
void initStats (struct task_struct* tsk);
#endif
当我尝试编译时,它给了我以下警告
warning: ‘struct task_struct’ declared inside parameter list will not be visible outside of this definition or declaration
17 | void initStats (struct task_struct* tsk);
我也看到过类似的问题,但一直没能解决问题。我想知道问题是否是因为两个文件相互包含。任何帮助将不胜感激:)。
编辑:我更改了代码中的一些内容。现在,我没有使用 task_struct 作为参数,而是使用了 struct stats。但是现在 sched.h 文件找不到 struct stats 的声明。我不知道如何解决这个问题。由于编译器给我的错误不同,我发布了一个新问题:
似乎在文件作用域中之前声明的结构struct task_struct
在声明函数的地方不可见。
如果是,那么在此函数声明中
void initStats (struct task_struct* tsk);
类型说明符 struct task_struct
具有函数原型范围并且在函数原型之外不可见。
即此类型说明符与类型说明符不同
struct task_struct {
...
struct stats stat;
};
在函数原型外声明。
来自 C 标准(6.2.1 标识符的范围)
- ...The same identifier can denote different entities at different points
in the program.
和
- ...If the declarator or type specifier that declares the identifier appears
within the list of parameter declarations in a function
prototype (not part of a function definition), the identifier has
function prototype scope, which terminates at the end of the function
declarator
这是一个重现编译器消息的演示程序。
#include <stdio.h>
// struct A;
void f( struct A );
struct A
{
int x;
};
int main(void)
{
return 0;
}
prog.c:5:16: error: ‘struct A’ declared inside parameter list will not be visible outside of this definition or declaration [-Werror]
void f( struct A );
^
如果取消注释前向声明
// struct A;
然后错误信息就会消失。
我有如下一段代码:
文件sched.h
#ifndef __SCHED_H__
#define __SCHED_H__
#include <stats.h>
truct task_struct {
...
struct stats stat;
};
#endif
文件stats.h
#ifndef STATS_H
#define STATS_H
#include <sched.h>
struct stats
{
...
};
void initStats (struct task_struct* tsk);
#endif
当我尝试编译时,它给了我以下警告
warning: ‘struct task_struct’ declared inside parameter list will not be visible outside of this definition or declaration 17 | void initStats (struct task_struct* tsk);
我也看到过类似的问题,但一直没能解决问题。我想知道问题是否是因为两个文件相互包含。任何帮助将不胜感激:)。
编辑:我更改了代码中的一些内容。现在,我没有使用 task_struct 作为参数,而是使用了 struct stats。但是现在 sched.h 文件找不到 struct stats 的声明。我不知道如何解决这个问题。由于编译器给我的错误不同,我发布了一个新问题:
似乎在文件作用域中之前声明的结构struct task_struct
在声明函数的地方不可见。
如果是,那么在此函数声明中
void initStats (struct task_struct* tsk);
类型说明符 struct task_struct
具有函数原型范围并且在函数原型之外不可见。
即此类型说明符与类型说明符不同
struct task_struct {
...
struct stats stat;
};
在函数原型外声明。
来自 C 标准(6.2.1 标识符的范围)
- ...The same identifier can denote different entities at different points in the program.
和
- ...If the declarator or type specifier that declares the identifier appears within the list of parameter declarations in a function prototype (not part of a function definition), the identifier has function prototype scope, which terminates at the end of the function declarator
这是一个重现编译器消息的演示程序。
#include <stdio.h>
// struct A;
void f( struct A );
struct A
{
int x;
};
int main(void)
{
return 0;
}
prog.c:5:16: error: ‘struct A’ declared inside parameter list will not be visible outside of this definition or declaration [-Werror]
void f( struct A );
^
如果取消注释前向声明
// struct A;
然后错误信息就会消失。