【问题标题】:what is wrong with the following typecasting c code以下类型转换 c 代码有什么问题
【发布时间】:2012-01-17 13:24:25
【问题描述】:

我有这个代码

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

key 和 value 都在与

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

VC 2010 报告以下错误

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

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

错误 C2065:“值”:未声明的标识符

错误 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; }

如果我不将返回的值类型转换为 key*,它会报告类型不匹配错误

【问题讨论】:

  • 请提供一个完整但很小的例子。
  • 错过了包括keyvalue 的类型定义的标头?
  • C != C++。在 C++ 中,struct xyz {...}; 自动为“xyz”生成 typedef。在 C 中它没有;你仍然需要输入struct xyz abc = {...}。另外:移除石膏;它们不是必需的:void 指针可以转换为任何指针类型。 (而且演员阵容很丑)。

标签: c casting syntax-error variable-assignment


【解决方案1】:

(key*) in you cast 应该是 (struct key*)

你还没有创建类型“key”。

即你还没有完成:

typedef struct
{
   <some defines>
} key;

那么 (key*) 就可以了。

【讨论】:

    【解决方案2】:

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

    如果你想做一个前向声明,语法是这样的:

    struct key;
    struct value;
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-10-10
        • 1970-01-01
        • 2012-04-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多