Почему я получаю эти две ошибки?

Я описал прототип функции 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 шт):

Автор решения: Harry

Надеюсь, что заголовочный файл в .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*?

Я бы начал с исправления этих ошибок...

→ Ссылка