2012-01-17 52 views
0

我有這樣的代碼有什麼不妥以下類型轉換的C代碼

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:'鍵':未聲明的標識符

錯誤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; } 

如果我不類型轉換返回值給鑰匙*,它報告類型不匹配錯誤

+3

請提供一個完整的小例子。 – Lindydancer 2012-01-17 13:26:15

+1

錯過了包含'key'和'value'類型定義的標頭? – 2012-01-17 13:26:37

+0

C!= C++。在C++中,一個'struct xyz {...};'自動生成「xyz」的typedef。在C中它不會;你仍然需要鍵入'struct xyz abc = {...}'。另外:刪除演員;它們不是必需的:void指針可以轉換爲任何指針類型。 (和演員醜陋)。 – wildplasser 2012-01-17 13:51:10

回答

1

(*鍵)在你施放應該是(結構*鍵)

您尚未創建類型爲「關鍵」。

即你沒有這樣做:

typedef struct 
{ 
    <some defines> 
} key; 

然後(*鍵)會工作。

0

這似乎是編譯器沒有按」瞭解「關鍵」和「價值」類型。你確定你是正確的嗎?

+0

請檢查我的編輯 – John 2012-01-17 13:28:41

1

struct key *, value*;沒有聲明任何東西。如果你想要做一個向前聲明它甚至不是有效C.

,語法是這樣的:

struct key; 
struct value; 

但是,你確定你不應該用一些自定義,以取代keyvalue類型? C中的數據結構經常有void *這樣的字段,所以你可以在其中放入任何指針,然後將它們投射到你自己的結構中。