【问题标题】:Error dereferencing pointer to incomplete type [closed]取消引用指向不完整类型的指针时出错[关闭]
【发布时间】:2017-03-21 05:28:42
【问题描述】:

我有两个文件,file.h 和 file.c

在头文件中我有以下定义:

struct openfile {
    struct vnode *of_vnode;
    struct lock *of_lock;
    off_t of_offset;
    int of_accmode; /* from open: O_RDONLY, O_WRONLY, or O_RDWR */
    int of_refcount;
};

struct filetable {
    struct openfile *ft_openfiles[MAX_FILES];
};

我正在尝试访问 file.c 中的 openfiles 数组。例如,

int fd;
/* NULL-out the table */
for (fd = 0; fd < MAX_FILES; fd++) {
    curthread->t_filetable->ft_openfiles[fd] = NULL;
}

访问 ft_openfiles 数组的行在编译期间导致错误。

../../userprog/file.c:157: error: dereferencing pointer to incomplete type

我在这里查看了一些相关问题,但我并不真正理解错误。

【问题讨论】:

  • This post 是相关的。
  • 什么是curthread,什么是t_filetable?这些都是必要的
  • 还可以尝试用curthread-&gt;t_filetable-&gt;ft_openfiles[fd] = {NULL}; 替换有问题的行,看看是否可行。如果是的话,我会把它放在一个答案中。
  • 这些文件用于管理内核线程结构内打开的文件。初始化函数可以在多个线程中调用。需要 curthread 和 t_filetable 来确保我只访问当前线程的文件系统。我将 NULL 替换为 {NULL},我收到以下错误:“{”标记之前的预期表达式

标签: c compiler-errors


【解决方案1】:

错误意味着 curthread 或 t_filetable 属于已声明但未完全定义的类型。其中之一是 void 类型的指针或缺少类型定义。

以下示例可能会触发相同的错误:

struct A;
struct A curthread;

【讨论】:

  • 你说的是什么class。我的C 编译器从未听说过。
  • @StoryTeller:好点,我没有意识到c(而不是c++)。尽管如此,考虑到信息泄露的问题,答案可能是最好的提示范围。此外,讽刺也无济于事。
  • 我之所以发表评论,而不是投反对票,是因为它确实是正确的答案。但是代码示例应该与正在讨论的语言有关。您不会在这里发布 Javascript 代码来证明您的观点,对吗?在评论中注入一点幽默也没有坏处。
  • 绝对正确。
猜你喜欢
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 2013-03-11
相关资源
最近更新 更多