2

我正在构建一个链表,这是列表项结构:

struct TListItemStruct
{
    void* Value;
    struct TListItemStruct* NextItem;
    struct TListItemStruct* PrevItem;
};
typedef struct TListItemStruct TListItem;
typedef TListItem* PListItem;

我在几个功能中使用它,到目前为止看起来还不错。但是,当我定义以下变量时:

PListItem item;

我收到以下错误:

error C2275: 'PListItem' : illegal use of this type as an expression

这是为什么?定义指向结构的类型指针变量有什么问题?

编辑:这是更多的功能。这不起作用

BOOL RemoveItem(PListItem item)
{
    // Verify
    if (item == NULL)
    {
        return FALSE;
    }
    // Get prev and next items
    PListItem prev;
    prev = item->PrevItem;
    //PListItem next = (PListItem)(item->NextItem);
 ...

但是,这有效:

BOOL RemoveItem(PListItem item)
{
    PListItem prev;
    // Verify
    if (item == NULL)
    {
        return FALSE;
    }
    // Get prev and next items
    prev = item->PrevItem;
    //PListItem next = (PListItem)(item->NextItem);
 ...

我正在使用VS2012,也许这是一个标准的东西?在函数的开头声明变量?

4

2 回答 2

2

MSVC 使用 C89,它不支持C99,因此您需要在函数开头声明所有变量或编译为 C++。

于 2012-11-19T19:04:08.367 回答
1

在 C89(Visual Studio 2012 支持)中,您必须在作用域的开头声明变量。这就是为什么您的后一个示例可以正常工作的原因。

于 2012-11-19T19:18:50.257 回答