0

3 つの構造体を定義するヘッダー ファイルを作成すると問題が発生します。問題は、構造体間の依存関係です。このような c 構文を試してみましたが、コードをコンパイルするとエラーが発生します。

エラーは次のとおりです。

/home/user/top/t2_cur/tinyos-2.x/tos/platforms/telosb/mac/tkn154/timer/Alarm32khzTo62500hzTransformC.nc:53:2: 警告: #warning "警告: MAC タイミングは標準に準拠していません!" make: * [exe0] エラー 1

これは私のコードです:

#define PRECISION nx_float
typedef nx_struct neurA neuronA;
typedef nx_struct neurB neuronB;
typedef nx_struct neurC neuronC;

nx_struct neurB{
  neurA in[2];
  neurC out;

 PRECISION trans_value;
 PRECISION prop_value;
 PRECISION delta;

 PRECISION in_weight[2];
 PRECISION out_weight[1];
}

nx_struct neurA{
  neurB out[3];

  PRECISION trans_value;
  PRECISION delta;
  PRECISION out_weight[3]; 
}

nx_struct neurC{
 neurB in;

 PRECISION trans_value;
 PRECISION prop_value;
 PRECISION delta;

 PRECISION in_weight;
}

構造体 neurB は、変数 neurC と neurB をその内部で宣言します。コード内の他のすべての構造体の上に neurB 構造体の宣言を配置すると、その内部で neurb 変数を宣言する neurC 構造体が原因でエラーが発生します。構造体の宣言を逆にすると、別の原因で問題が解決しません。

私もこの方法で試しました:

  typedef nx_struct neurA{
      neurB out[3];

      PRECISION trans_value;
      PRECISION delta;
      PRECISION out_weight[3]; 
    }neurA;

    typedef nx_struct neurC{
     neurB in;

     PRECISION trans_value;
     PRECISION prop_value;
     PRECISION delta;

     PRECISION in_weight;
    }neurC;

    typedef nx_struct neurB{
      neurA in[2];
      neurC out;

     PRECISION trans_value;
     PRECISION prop_value;
     PRECISION delta;

     PRECISION in_weight[2];
     PRECISION out_weight[1];
    }neurB;
4

2 に答える 2

0

TinyOS のエラー メッセージには、エラーの正確な理由が表示されないことがよくあります。ただし、コードは少なくとも 2 つの側面で間違いなく正しくありません。

まず、neurChavingneurBneurBhavingの定義neurCは、コンパイルできない再帰的な依存関係です。おそらくポインタをフィールドとして使いたいでしょう:

typedef struct neurC {
    neurB *in;
} neurC;

neurB第二に、お気づきのように、その定義の前に使用することはできません。解決策は、最初に宣言し、後で構造体を定義することです。混乱を避けるために、実際の型には構造体とは異なる方法で名前を付けています (型の名前は で終わります_t)。2 つの構造の例は次のとおりです。

typedef struct neurB neurB_t; // declaration of neurB_t as struct neurB

typedef struct neurC {
    neurB_t *in; // neurB_t is declared before, so it can be used here
} neurC_t;

struct neurB { // definition of struct neurB
    neurC_t *out; // neurC_t is declared before
};
于 2014-06-05T17:10:29.703 に答える
0

エラーメッセージが奇妙で理解できない場合があります。これを取り巻くヘッダーがわかりません。また、これが当てはまるかどうかもわかりません。次のような単純なもので試してください

typedef struct Point {
    int x;
    int y;
} Point;

Point vPoint;

独自の型を一度に 1 つずつプログラムに代入する

上記を見て、使用する前に上記の Point のように neurA を型定義する必要があると思います。

于 2014-01-07T22:44:37.427 に答える