Неявное объявление функции 'toLower', <ctype.h> уже включено

Я продолжаю получать эти 2 ошибки компиляции в моей программе.

word_freq_binary.c: In function 'getWord'
word_freq_binary.c:36:4: warning: implicit declaration of function ‘toLower’
    str[n++] = toLower(ch);
    ^
tmp/ccYrfdxE.o: In function 'getWord':
word_freq_binary.c:(.text+0x91): undefined reference to `toLower'
collect2: error: ld returned 1 exit status

Я определил следующим образом:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MaxWordSize 20

Функция с ошибкой:

int getWord(FILE *in, char str[])
{
    //stores the next word if any, in str; word is converted
    //to lowercase
    //return 1 if a word is found; 0, otherwise
    char ch;
    int n = 0;
    while (!isalpha(ch = getc(in)) && ch != EOF);
    if (ch == EOF)
    {
        return 0;
    }
    str[n++] = tolower(ch);
    while(isalpha(ch = getc(in)) && ch != EOF)
        if (n < MaxWordSize) {
            str[n++] = toLower(ch);
        }
    str[n] = '\0';
    return 1;
} //end getWord

Моя основная функция:

int main() {
    int getWord(FILE *, char[]);
    TreeNodePtr newTreeNode(NodeData);
    NodeData newNodeData(char[], int);
    TreeNodePtr findOrInsert(BinaryTree, NodeData);
    void inOrder(FILE *, TreeNodePtr);
    char word[MaxWordSize + 1];
    FILE *in = fopen("./c/IronHeel.txt", "r");
    FILE *out = fopen("./c/IronHeelOutput.txt", "w");

    BinaryTree bst;
    bst.root = NULL;
    while(getWord(in, word) != 0) {
        if (bst.root == NULL)
        {
            bst.root = newTreeNode(newNodeData(word, 1));
        }
        else
        {
            TreeNodePtr node = findOrInsert(bst, newNodeData(word, 0));
            node -> data.wordCount++;
        }
    }
    fprintf(out, "\nWords        Frequency\n\n");
    inOrder(out, bst.root);
    fprintf(out, "\n\n");
    fclose(in);
    fclose(out);
    system ("PAUSE");
    return 0;
}

Я понятия не имею, почему я получаю эту ошибку, поскольку я включил ctype.h.

1 ответ

Решение

Как кто-то уже сказал вам, поместите функцию tolower в нижний регистр, так как C чувствителен к регистру. Также был полезен и второй комментарий: использование верблюжьего стиля в C-коде не распространено.

Проблема в том, что компоновщик не может найти ссылку на символ toLower, потому что этот не объявлен или не реализован. Вот почему вы также получите первое предупреждение.

Другие вопросы по тегам