0

Cでコーディングしてから長い時間が経ちましたが、今ではリンクリストを作成することさえできません:(構造の何が問題なのですか?私はこのNodeType例を試しても、まだこれに似たエラーが発生します.

Linux と Windows で動作するリンク リストを作成する必要があります (大幅な変更は必要ありません)。

次のコマンドを使用してコンパイルしますcl myFile.c

エラーメッセージ:

Microsoft (R) 32 ビット C/C++ 最適化コンパイラ バージョン 16.00.40219.01 for 80x86 Copyright (C) Microsoft Corporation. 全著作権所有。

unlock.c unlock.c(46) : エラー C2275: 'Node' : この型を式として不正に使用します unlock.c(17) : 'Node' の宣言を参照してください unlock.c(46) : エラー C2146: 構文エラー: ない ';' 識別子 'a' unlock.c(46) の前: エラー C2065: 'a': 宣言されていない識別子

ソースコード:

#include <stdio.h>
#include <windows.h>
#include<stdlib.h>


typedef enum {STABLE, RPUSH, LPUSH} STATUS_TYPE;


typedef struct NodeType
{
    struct NodeType* _left;
    struct NodeType* _right;
    int _value;
}Node;

typedef struct AnchorType
{
    struct Node* _mostLeft;
    struct Node* _mostRight;
    STATUS_TYPE _status;
} Anchor;

Node CreateNode(int data)
{
    Node newNode;
    newNode._value = data;
    newNode._left = NULL;
    newNode._right = NULL;

    return newNode;
}


int main()
{
    Anchor anchor;
    anchor._mostLeft = NULL;
    anchor._mostRight = NULL;
    anchor._status = STABLE;


    Node a; //<-- What might be wrong ?

    return 0;
}

手伝ってくれてありがとう。

4

2 に答える 2

3

Microsoft は C++ コンパイラに重点を置いており、その C サポートは何十年も前のものです。

Microsoft のコンパイラでサポートされていない新しい C 標準の機能の 1 つは、関数の途中で変数を宣言する機能です。

宣言を一番上に移動すると、すべて問題ありません。

int main()
{
    Anchor anchor;
    Node a; // ok here
    anchor._mostLeft = NULL;
    anchor._mostRight = NULL;
    anchor._status = STABLE;


    //Node a; but not here

    return 0;
}
于 2012-09-26T18:42:34.937 に答える
0

問題は、structure タグがNodeTypeであるのに、typedefタグがNode. どちらも同じものを参照する必要があります。そのような:

typedef struct Node
{ 
    struct Node* _left; 
    struct Node* _right; 
    int _value; 
} Node;

これにより、typedefという名前のNodeが作成されstruct Nodeます。

Microsoft コンパイラ ターゲット コードでは、通常、次のように表示されます。

typedef struct Node
{ 
    struct Node* _left; 
    struct Node* _right; 
    int _value; 
} tagNode;

typedef struct Anchor
{ 
    struct Node* _mostLeft; 
    struct Node* _mostRight; 
    STATUS_TYPE _status; 
} tagAnchor; 

tagNodeMicrosoft コンパイラ コードでは決して使用されませんNode。Microsoft コンパイラはこれに非常に満足しており、コードを読んでいる人は、構造を参照していることがわかります。

typedef およびタグの C および C++ 命名の歴史を含む詳細については、次の場所に投稿された anwser を参照してください

于 2012-09-26T19:00:05.543 に答える