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を使用していますが、おそらくそれは標準的なものですか?関数の先頭で vars を宣言するには?

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 に答える