#c #struct #declaration #definition #incomplete-type
Вопрос:
Я пытаюсь ввести значение в структуру, которая есть у меня в заголовочном файле. Значение задается в основном файле и передается в качестве аргумента функции. Но я получаю сообщение об ошибке, в котором говорится error: dereferencing pointer to incomplete type ‘struct Array’ array->size = size;
Компилятор говорит о стрелке в строке array->size = size;
, которую я предоставил в своих файлах ниже.
Заголовок.h:
#include <stdio.h>
//Include libraries used
struct Array {
unsigned int size;
unsigned int cap;
int data;
};
//Declare struct Array
struct Array *newArray(unsigned int size, unsigned int cap);
функция.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
struct Array *newArray(unsigned int size, unsigned int capacity ) {
struct Array *array;
array->size = size;
}
Мой основной файл.c содержит файл заголовка, поэтому в файле function.c его нет. Он также вызывает функцию newArray(5, 20), придавая размеру значение 5. Как исправить эту ошибку, чтобы размер структуры был равен 5? Спасибо, я был бы очень признателен за помощь.
Комментарии:
1. Вам нужно установить
array
, прежде чем пытаться разыменовать его. Это неопределенное значение указателя.2. Кроме того,
struct Array
не имеет членаwidth
. Не будьте небрежны, но также публикуйте точный код, который вы пытаетесь, не показывайте нам ошибки, которые не относятся к вашему коду.3. @Cheatah Я исправил код, приношу свои извинения, я неправильно ввел информацию.
Ответ №1:
Вам нужно включить заголовок Header.h
, в котором определена структура, в модуль function.c
, в котором определена функция.
В противном случае в этом определении функции
struct Array *newArray(unsigned int width, unsigned int capacity ) {
struct Array *array;
array->width = width;
}
вводится спецификатор неполного типа struct Array
. И компилятор, который компилирует этот модуль, не знает, содержит ли структура такие элементы данных, как width
.
Хотя кажется, что фрагмент кода содержит опечатку, потому что определение структуры не содержит элемент данных width
, и компилятор в сообщении ссылается на элемент данных size
.
Также обратите внимание, что указатель array
не инициализирован.
struct Array *array;
и имеет неопределенное значение.
Поэтому в любом случае, даже если вы включите определение структуры, это утверждение
array->width = width;
вызовет неопределенное поведение.
Комментарии:
1. Я исправил свой код , я ввел «ширину», когда это должно было быть «размер»
2. @Raswall Это не очень важно. Я уже объяснил причину сообщения об ошибке.