Почему я получаю эти две ошибки?
Я описал прототип функции checkNull, структуру Word и прототип функции initDictionary в заголовочном файле
#include <stdio.h>
#ifndef LZWLIB_H_
#define LZWLIB_H_
typedef struct Word
{
unsigned int code;
char * value;
} Word;
void * checkNull(void* ptr);
Word * initDictionary(const char* inpurFileName, unsigned int* freeCode);
#endif /* LZWLIB_H_ */
Теперь, когда я пишу реализацию функции initDictionary в файле .c
Word* initDictionary(const char * inputFileName, unsigned int * freeCode)
{
// Реализация функции
}
int main ()
{
char * s = "toCompress.txt";
int freeCode = 0;
int * fptr = &freeCode;
Word * dictionary = initDictionary(s, fptr);
printf("%d\n", freeCode);
return 0;
}
minGW Выдает мне две ошибки:
lzwlib2.c:52:7: error: conflicting types for 'initDictionary'
Word* initDictionary(const char * inputFileName, unsigned int * freeCode
^~~~~~~~~~~~~~
In file included from lzwlib2.c:19:0:
lzwlib.h:16:8: note: previous declaration of 'initDictionary' was here
Word * initDictionary(const char* inpurFileName, int * freeCode);
^~~~~~~~~~~~~~
Что они означают и как их исправить? Я уже нагулил похожий вопрос на англоязычном StackOverflow, но там участник форума сначала вызывал функцию, а потом ее реализовывал. Я же раньше по коду написал реализацию, а затем вызов. Типы возвращаемых значений в прототипе и реализации совпадают. Почему я получил эти ошибки?
Ответы (1 шт):
Надеюсь, что заголовочный файл в .cpp-файл включен :)
Вижу несколько проблем -
char * s = "toCompress.txt";
справа никак не char*, литерал может быть приведен к const char*, но не к char*.
initDictionary(const char* inpurFileName,
unsigned int* freeCode)
Второй параметр у вас описан как unsigned int*, но передаете вы в него int*.
Кстати, из сообщения компилятора следует,, что в заголовочном файле эта функция описана как
Word * initDictionary(const char* inpurFileName, int * freeCode);
Проверьте - там и в самом деле int*?
Я бы начал с исправления этих ошибок...