2014-01-07 53 views
0

我有一個問題,當我創建一個頭文件,我定義三個結構! 問題是結構之間的依賴關係。 我嘗試使用類似c語法,但編譯代碼時收到錯誤。TinyOS nesC - typedef nx_struct依賴

錯誤是:

/home/user/top/t2_cur/tinyos-2.x/tos/platforms/telosb/mac/tkn154/timer/Alarm32khzTo62500hzTransformC.nc:53:2: 警告:#警告「警告: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; 

回答

0

有時錯誤消息是奇怪和難以理解的,我不知道這周圍的頭,如果這可能是這種情況。嘗試用類似

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

Point vPoint; 

同時

我想取代自己的類型到程序中一個,看着上面的簡單的東西,你需要使用它之前已經typedeffed的neurA像點以上。

+0

我試過你的解決方案,但它不起作用。還有另一個問題。 struct neurB在其內部聲明變量neurC和neurB。如果我把neurB結構的聲明放在代碼中的所有其他結構之上,那麼錯誤是由其內部聲明neurb變量的neurC結構引起的。如果我顛倒了struct的聲明,那麼問題仍然存在。結構問題繼續與另一個原因。 –

+0

在這個夜晚的這個時候,對我來說這聽起來太複雜了,所以我會通過。請記住,不管有多少箇中國盒子,在使用它之前,你必須先使內部盒子到位。 – user2692263

0

TinyOS錯誤消息通常不會顯示錯誤的確切原因。但是,您的代碼至少在兩個方面肯定不正確。

首先,具有neurBneurB具有neurC限定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 
};