error C2440: 'return' : cannot convert from 'void *' to 'struct trie_t *' 100
#include<stdio.h>#include<stdlib.h>charchr_legal[]="abcdefghijklmnopqrstuvwxyz0123456...
#include <stdio.h>#include <stdlib.h> char chr_legal[] = "abcdefghijklmnopqrstuvwxyz0123456789_-./";int chr_idx[256] = {0};char idx_chr[256] = {0}; #define FNAME 0typedef struct trie_t *trie, trie_t;struct trie_t { trie next[sizeof(chr_legal)]; /* next letter; slot 0 is for file name */ int eow;}; trie trie_new() { return calloc(sizeof(trie_t), 1); } #define find_word(r, w) trie_trav(r, w, 1)trie trie_trav(trie root, char * str, int no_create){ int c; while (root) { if ((c = str[0]) == '\0') { if (!root->eow && no_create) return 0; break; } if (! (c = chr_idx[c]) ) { str++; continue; } if (!root->next[c]) { if (no_create) return 0; root->next[c] = trie_new(); } root = root->next[c]; str++; } return root;} int trie_all(trie root, char path[], int depth, int (*callback)(char *)){ int i; if (root->eow && !callback(path)) return 0; for (i = 1; i < sizeof(chr_legal); i++) { if (!root->next[i]) continue; path[depth] = idx_chr[i]; path[depth + 1] = '\0'; if (!trie_all(root->next[i], path, depth + 1, callback)) return 0; } return 1;} void add_index(trie root, char *word, char *fname){ trie x = trie_trav(root, word, 0); x->eow = 1; if (!x->next[FNAME]) x->next[FNAME] = trie_new(); x = trie_trav(x->next[FNAME], fname, 0); x->eow = 1;} int print_path(char *path){ printf(" %s", path); return 1;} char *files[] = { "f1.txt", "source/f2.txt", "other_file" };char *text[][5] ={{ "it", "is", "what", "it", "is" }, { "what", "is", "it", 0 }, { "it", "is", "a", "banana", 0 }}; trie init_tables(){ int i, j; trie root = trie_new(); for (i = 0; i < sizeof(chr_legal); i++) { chr_idx[(int)chr_legal[i]] = i + 1; idx_chr[i + 1] = chr_legal[i]; } #define USE_ADVANCED_FILE_HANDLING 0#if USE_ADVANCED_FILE_HANDLING void read_file(char * fname) { char cmd[1024]; char word[1024]; sprintf(cmd, "perl -p -e 'while(/(\\w+)/g) {print lc($1),\"\\n\"}' %s", fname); FILE *in = popen(cmd, "r"); while (!feof(in)) { fscanf(in, "%1000s", word); add_index(root, word, fname); } pclose(in); }; read_file("f1.txt"); read_file("source/f2.txt"); read_file("other_file");#else for (i = 0; i < 3; i++) { for (j = 0; j < 5; j++) { if (!text[i][j]) break; add_index(root, text[i][j], files[i]); } }#endif return root;} void search_index(trie root, char *word){ char path[1024]; printf("Search for \"%s\": ", word); trie found = find_word(root, word); if (!found) printf("not found\n"); else { trie_all(found->next[FNAME], path, 0, print_path); printf("\n"); }} int main(){ trie root = init_tables(); search_index(root, "what"); search_index(root, "is"); search_index(root, "banana"); search_index(root, "boo"); return 0;
}
其中有一处报错 出错在哪里啊 展开
}
其中有一处报错 出错在哪里啊 展开
5个回答
展开全部
亲,我的眼睛都快看瞎了,根据上面提示的错误类型来看,应该是return返回的值,与函数的返回值类型不匹配,你看看。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-12-20
展开全部
免费的女孩,美女
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
trie trie_new() { return calloc(sizeof(trie_t), 1); }
修改为
trie trie_new() { return (trie)calloc(sizeof(trie_t), 1); }
修改为
trie trie_new() { return (trie)calloc(sizeof(trie_t), 1); }
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询