我在创建头文件时遇到问题,我在其中定义了三个结构! 问题是结构之间的依赖关系。 我尝试这样的-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;
}
struct 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;
答案 0 :(得分:0)
有时错误消息很奇怪且难以理解,我不知道围绕这个的标题,如果可能是这种情况。尝试使用像
这样简单的东西typedef struct Point {
int x;
int y;
} Point;
Point vPoint;
一次一个地将您自己的类型替换为程序
我认为,考虑到上述情况,您需要在使用之前对类似于上述Point的类型进行类型设计。
答案 1 :(得分:0)
TinyOS错误消息通常不会显示错误的确切原因。但是,至少在两个方面,您的代码肯定是不正确的。
首先,定义neurC
neurB
和neurB
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
};