以下类型转换c代码有什么问题

时间:2012-01-17 13:24:25

标签: c casting syntax-error variable-assignment

我有这段代码

if (hashtable_count(h) > 0)
    {
      do {
          kk = (key*)hashtable_iterator_key(itr);
          v =(value*) hashtable_iterator_value(itr);
....

键和值都在与

相同的代码块中声明
 struct key *k, *kk;
struct value *v;

和VC 2010报告以下错误

错误C2065:'key':未声明的标识符

错误C2059:语法错误:')'

错误C2065:'value':未声明的标识符

错误C2059:语法错误:')'

错误是针对两个分配线的。第一个赋值语句有两个第一个错误,最后一个错误是第二个错误。

如果有必要,我会很乐意提供更多细节。

更多信息: 这是两个函数

 void * hashtable_iterator_key(struct hashtable_itr *i)
  { return i->e->k; }

void * hashtable_iterator_value(struct hashtable_itr *i)
  { return i->e->v; }

如果我没有将返回值输入到键*,则会报告类型不匹配错误

3 个答案:

答案 0 :(得分:1)

struct key *, value*;没有声明任何内容。它甚至不是有效的C.

如果要进行前向声明,语法为:

struct key;
struct value;

但是,您确定不应该使用某种自定义类型替换keyvalue吗?通常,C中的数据结构对于这样的字段具有void *,因此您可以将任何指针放入其中,然后将它们转换为您自己的结构。

答案 1 :(得分:1)

你演员的

(键*)应该是(struct key *)

您尚未创建“键”类型。

即。你还没有完成:

typedef struct
{
   <some defines>
} key;

然后(键*)可以工作。

答案 2 :(得分:0)

似乎编译器不知道“密钥”和“值”类型。你确定你做出了正确的包含吗?