我正在制作一个 ncurses 应用程序,我遇到了一些令人费解的事情。
如果您有一个结构,其中有一个名为“refresh”的成员,它是一个函数指针,并且您稍后调用该函数,您将得到以下编译时错误:
main.c:20:10: error: ‘Point’ has no member named ‘wrefresh’
point.refresh();
这里有一个你可以尝试编译的小测试:
#include <ncurses.h>
typedef struct PointStruct Point;
void Point_refresh() {
}
struct PointStruct {
int x;
int y;
void (*refresh)();
};
int main() {
Point point;
point.x = 0;
point.y = 0;
point.refresh = &Point_refresh;
point.refresh();
}
这会给你上面提到的错误。但是,如果您删除包含 ncurses 的第一行,它将编译没有问题。
这对 ncurses 不起作用的原因是什么,有没有办法解决它?这没什么大不了的,只是有点烦人,我必须重命名该成员。
最佳答案
因为 refresh()
是一个“伪函数” #define
被 curses 定义为 wrefresh(win)
的宏,所以预处理器将替换源中所有出现的那个词。除了 #undef
之外,没有其他明智的方法,始终使用 wrefresh()
代替。
关于c - 为什么在使用 ncurses 时不能有一个成员名为 "refresh"的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23530837/