C-声明时未声明的变量
我正在用C语言建立一个哈希表。 除了这个变量,C-声明时未声明的变量,c,C,我正在用C语言建立一个哈希表。 除了这个变量,cur_item,它在编译时报告了一个错误之外,其他一切似乎都正常工作 代码如下: void insert(hash_table* ht, const char* key, const char* value) { const int load = ht->count * 100 / ht->size; if (load > 70) {
cur_item
,它在编译时报告了一个错误之外,其他一切似乎都正常工作
代码如下:
void insert(hash_table* ht, const char* key, const char* value) {
const int load = ht->count * 100 / ht->size;
if (load > 70) {
resize_up(ht);
}
item* item = new_item(key, value);
int index = get_hash(item->key, ht->size, 0);
item* cur_item = ht->items[index];
int i = 1;
while (cur_item != NULL) {
/** PROCESS **/
}
}
这是我的Makefile(我想不是最好的):
下面是错误:
./src/hash_table.c: In function ‘insert’:
./src/hash_table.c:65:9: error: ‘cur_item’ undeclared (first use in this function); did you mean ‘del_item’?
item* cur_item = ht->items[index];
^~~~~~~~
del_item
./src/hash_table.c:65:9: note: each undeclared identifier is reported only once for each function it appears in
make: *** [Makefile:10: hash_table.o] Error 1
类型项
表示我创建的结构。
delu item
是一个函数,没有理由在那里使用它
如果我在If
循环之前声明cur\u项
,然后在get\u hash()
函数之后初始化其值,编译工作正常
有人能解释一下为什么第一次编译失败了吗?我的Makefile中是否缺少某些内容?您刚刚将标识符
项
重载为变量。因此,当您试图声明cur\u item
时,编译器会感到困惑,不知道您想要什么
不要对变量和类型使用相同的名称。显然,这会使您和编译器混淆。您只是将标识符
项
重载为变量。因此,当您试图声明cur\u item
时,编译器会感到困惑,不知道您想要什么
不要对变量和类型使用相同的名称。显然,这让您和编译器感到困惑。
item*item
没有让编译器不高兴,那么为什么item*cur\u item
?也许你们并没有向我们展示我们所需要的一切……而且,变量应该在任何execute语句之前在顶部初始化。即使你是在最新的C标准,这应该考虑到其他代码是丑陋的和嘈杂的。justSayinI我愿意给你更多的信息,但我找不到相关的信息来帮助你。我在源代码中声明了另一个item
变量,这个变量是唯一尝试使用-std选项编译的变量=gnu99@tilz0R有些编码风格希望这样,而另一些则不希望这样。我认为在第一次使用时引入变量是一种好的风格。不要对新来者强加中世纪的要求。item*item
没有让编译器不高兴,那么为什么item*cur\u item
?也许你们并没有向我们展示我们所需要的一切……而且,变量应该在任何execute语句之前在顶部初始化。即使你是在最新的C标准,这应该考虑到其他代码是丑陋的和嘈杂的。justSayinI我愿意给你更多的信息,但我找不到相关的信息来帮助你。我在源代码中声明了另一个item
变量,这个变量是唯一尝试使用-std选项编译的变量=gnu99@tilz0R有些编码风格希望这样,而另一些则不希望这样。我认为在第一次使用时引入变量是一种好的风格。不要把中世纪的要求强加给新来的人。很抱歉回答晚了,但我不能早点测试。你是对的,这解决了我的问题。把我的变量命名为与结构类型完全相同的变量是不明智的。谢谢很抱歉回答晚了,但我不能早点测试。你是对的,这解决了我的问题。把我的变量命名为与结构类型完全相同的变量是不明智的。谢谢
./src/hash_table.c: In function ‘insert’:
./src/hash_table.c:65:9: error: ‘cur_item’ undeclared (first use in this function); did you mean ‘del_item’?
item* cur_item = ht->items[index];
^~~~~~~~
del_item
./src/hash_table.c:65:9: note: each undeclared identifier is reported only once for each function it appears in
make: *** [Makefile:10: hash_table.o] Error 1