2012-12-24 58 views
2

當試圖將一個對象插入到一個table(結構體)中時,我得到此消息,該結構體包含一個結構體類型爲ObjectLink的數組。該結構:C++:' - >'的無效類型參數

typedef struct ObjectLink { 
    void *key; 
    struct Object *next; 
} ObjectLink; 

typedef struct Object { 
    void *key; 
    ObjectLink *top; 
} Object; 

typedef struct Table{ 
    ObjectLink *linkedObjects; 
    int size, originalSize; 
    HashFcn hfun; 
    PrintFcn pfun; 
    ComparisonFcn fcomp; 
} Table; 

的代碼失敗(在所有的作業& if語句):

Boolean InsertObject(TableP table, ObjectP object) 
{ 

    int i = table->hfun(object, table->size); 
    if (table->linkedObjects[i]->key == NULL) 
    { 
     table->linkedObjects[i]->key = object; 
    } else 
    { 
     table->linkedObjects[i]->next->key = object; 
    } 

    return TRUE; 
} 

我搜索在previous questions,但沒有幫助。這裏有什麼問題?

回答

4

由於linkedObjects是指針,因此linkedObjects[i]是對象本身。 ->運算符只能用於指針;當你有一個struct,您需要使用規則的點操作.進行實地訪問:

table->linkedObjects[i].key = object; 
//      ^--- Here 
+0

那麼,爲什麼不是一個結構本身的表,而不是一個指針不會像這樣調用:table.linkedObjects [i] .key – Tom

+1

@Tom'table'是類型'TableP',它沒有顯示在定義中;然而,'P'可能代表'指針'。 – dasblinkenlight

3

的數組下標操作[]被定義爲:E1[E2] == *((E1)+(E2))。使用->時,您試圖取消引用不存在的指針(因爲您已經使用運算符[]取消了指針的引用)。所以,正確的解決方案是:

table->linkedObjects[i].next->key = object; 

相反的:

table->linkedObjects[i]->next->key = object; 

linkedObjects[i]ObjectLink類型,沒有必要取消對它的引用的。

相關問題