我在程序中不断收到这两个编译错误。
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。
答案 0 :(得分:4)
正如有人已经告诉过你的那样,将tolower函数放在小写字母中,因为C区分大小写。第二条评论也很有用:在C代码中使用驼峰样式并不常见。
问题是链接器找不到对符号toLower的引用,因为这个引用未被声明实现。这也是你得到第一个警告的原因。