0

当我创建一个定义三个结构的头文件时,我遇到了问题!问题是结构之间的依赖关系。我尝试使用这种 like-c 语法,但在编译代码时收到错误消息。

错误是:

/home/user/top/t2_cur/tinyos-2.x/tos/platforms/telosb/mac/tkn154/timer/Alarm32khzTo62500hzTransformC.nc:53:2:警告:#warning “警告:MAC 计时不符合标准!” 制作:* [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 结构引起的。如果我反转 struct 的声明,则问题仍然存在,原因是另一个原因。

我也尝试过这种方式:

  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

有时错误消息很奇怪且难以理解,我不知道周围的标题以及是否可能是这种情况。尝试一些简单的东西,比如

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

Point vPoint;

一次一个地将您自己的类型替换到程序中

我认为,看看上面的内容,在使用之前,您需要像上面的点一样键入神经元。

于 2014-01-07T22:44:37.427 回答
0

TinyOS 错误消息通常不会显示错误的确切原因。但是,您的代码至少在两个方面肯定是不正确的。

首先,定义neurC拥有neurBneurB拥有neurC是一种无法编译的递归依赖。您可能希望将指针用作字段:

typedef struct neurC {
    neurB *in;
} neurC;

其次,正如您所注意到的,您不能neurB在定义之前使用。解决方法是在开始时声明它,然后再定义一个结构。为避免混淆,我以不同于结构的方式命名实际类型(类型的名称以 结尾_t)。两个结构的示例是:

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 回答