我正在尝试发送包含随机整数的数组(这是一个对象?)。我想将数组发送到 sort()以便对数组进行排序,但是当我将数组解析为 sort()时,我得到了以下错误:error: dereferencing pointer to incomplete type
。如果您要更改代码中的任何内容,请解释您正在做什么以及为什么要这样做,因为我已经对代码感到困惑,因为它现在是。
我不允许更改array.c或array.h中的代码,并且无法更改void_sort()的参数。
array.c
struct array {
int* data;
int size;
};
struct array* array_create()
{
struct array* array = (struct array*) malloc(sizeof(struct array));
array->data = (int*) malloc(sizeof(int) * 10000);
array->size = 10000;
return array;
}
array.h
typedef struct array* ARRAY;
ARRAY array_create();
的main.c
void sort (int A[], int N)
{
// Sort the array
}
ARRAY array;
array = array_create();
sort(array->data, 100); // This gives me error: dereferencing pointer to incomplete type
答案 0 :(得分:1)
您需要将数组struct
的声明移至array.h
。您得到的错误是因为main.c
中未知该类型。您可以使用指向未定义类型的指针,但无法访问其成员。
如果要隐藏实现,可以创建访问功能。添加到array.h:
int *array_data(ARRAY array);
int array_size(ARRAY array);
和array.c:
int *array_data(ARRAY array) { return array->data; }
int array_size(ARRAY array) { return array->size; }
并在main.c中:
sort(array_data(array), array_size(array));
答案 1 :(得分:1)
您需要将其从array.c移动到array.h:
struct array {
int* data;
int size;
};
那是因为这声明了数组类型。如果您不想这样做,可以将其复制粘贴到main.c中,每个人都会讨厌您,但您将完成不修改array.h或array.c的目标。