我正在使用 curses 库编写一个 c 程序,并希望创建一些反射(reflect)我的应用程序 UI 的结构。
这是我的 app.c
文件
#include <stdlib.h>
#include <stdio.h>
#include "screen.h"
int main() {
struct screen scr = {
.win1 = {
.title = "win1"
},
.win2 = {
.title = "win2"
}
};
}
这是screen.h
#ifndef SCREEN_H
#define SCREEN_H
#include "window.h"
struct screen {
struct window win1;
struct window win2;
struct window *focused;
};
#endif
这是window.h
#ifndef WINDOW_H
#define WINDOW_H
#include "screen.h"
struct window {
char *title;
void (*handle_key_event)(struct screen*);
};
#endif
我的窗口结构句柄方法必须接收对屏幕的引用,以便能够在某些特定情况下更改聚焦窗口。但是当我编译这个时,我收到了警告
window.h:8:34: warning: its scope is only this definition or declaration, 这可能不是你想要的
这是因为它没有看到屏幕声明。如何解决这个问题?
警告是当对结构的第一个引用在其他内容中时。
将struct screen;
放在struct window
的声明之上。
头文件的循环依赖是个坏主意。考虑重构。您不需要结构的定义来声明指向它的指针。前向声明就足够了。
我是一名优秀的程序员,十分优秀!