c - 取消引用指针 C 时类型不完整

标签 c pointers struct

我有一个给出定义的头文件

typedef struct dyn_array dyn_array_t

我有一个实现它的 .c 文件

struct dyn_array {
    size_t size;
    void* array;
};

在另一个 .c 文件中,我将这种类型的指针传递给函数。

bool first_come_first_serve(dyn_array_t* ready_queue){
    size_t limit = ready_queue->size; 
    //...
} 

我不知道我在这里做错了什么。

最佳答案

另一个 .c 文件没有看到 struct dyn_array 定义。它不理解像 size 这样的成员。


如果超过1个.c文件需要理解结构,将下面移动到.h文件

struct dyn_array {
  size_t size;
  void* array;
};

另一种方法是创建一个获取成员的函数,并将 dyn_array_t 的定义保留在 dyn_array.c 中。这是 information hiding - 一个好的设计目标。

// in dyn_array.h
typedef struct dyn_array dyn_array_t;
size_t get_size(const dyn_array_t* ready_queue);

// in different.c
#include <dyn_array.h>
bool first_come_first_serve(dyn_array_t* ready_queue){
  size_t limit = get_size(ready_queue); 
  //...
}

// in dyn_array.c
#include <dyn_array.h>

struct dyn_array {
    size_t size;
    void* array;
};

size_t get_size(const dyn_array_t* ready_queue) {
   return ready_queue->size; 
}

关于c - 取消引用指针 C 时类型不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49020005/

相关文章:

c++ - 这两种结构的写法是一样的吗?

CUDA 内核启动参数解释对了吗?

C - 编译器允许的语法无效?

c++ - 在用 C++ 编写 win32 api 包装器时,如何将此指针传递给静态函数

c++ - 奇怪的结构 - C++

struct - Swift 中变异函数的实例结构变量

c - 我不明白为什么我的 WRITE 函数(C 语言)不能使用字符 ('c' )?

c++ - 为什么,如果一个 char 被初始化为 1,然后左移 7 次并使用 %d 打印值,它会显示 -128 吗?

c - 通过指针的字符串(数组)容量

python - 指向 c_int 的 ctypes 指针与 c_int 数组