c ++:' - >'的无效类型参数

时间:2012-12-24 14:23:00

标签: c++

尝试将对象插入到包含结构类型table数组的ObjectLink(struct)时,我收到此消息。结构:

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搜索过,但没有帮助。这有什么不对?

2 个答案:

答案 0 :(得分:4)

由于linkedObjects是指针,linkedObjects[i]是对象本身。 ->运算符仅适用于指针;如果您有struct,则需要使用常规点运算符.进行字段访问:

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

答案 1 :(得分:3)

数组下标运算符[]定义为:E1[E2] == *((E1)+(E2))。使用->,您尝试取消引用不存在的指针(因为您已经使用运算符[]取消引用了指针)。所以正确的解决方案是:

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

而不是:

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

linkedObjects[i]的类型为ObjectLink,无需取消引用它。