2011-05-03 180 views
0

我正在處理計算機體系結構課程的SIM。我嘗試使用gcc v4.5.2編譯與MSYS1.1/MinGW的軟件包。嵌套結構定義

Makelog:

In file included from 
    sim-outorder.c:107:0: bpred.h:214:5: 
    error: expected specifier-qualifier-list before 'uint' 
    ... 
    make: *** [sim-outorder.o] Error 1 

我查bpred.h線214,有一個嵌套的結構定義爲:

208 /* branch predictor update information */ 
209 struct bpred_update { 
210 char *pdir1;   /* direction-1 predictor counter */ 
211 char *pdir2;   /* direction-2 predictor counter */ 
212 char *pmeta; /* meta predictor counter */ 
213 struct dir{    /* predicted directions */ 
214 uint bimod : 1; /* bimodal predictor */ 
215 uint twolev : 1; /* 2-level predictor */ 
216 uint meta : 1; /* meta predictor (0..bimod/1..2lev) */ 
217 } dir; 
218 }; 

有什麼不對這個結構塊? 你能幫忙嗎? 謝謝!

+5

uint定義在哪裏? – 2011-05-03 20:46:50

+0

struct unsigned int uint;補充說,案件得到解決。謝謝!! – 2011-05-05 19:57:57

回答

3

我相信你是從命名內部結構不允許的:

208 /* branch predictor update information */ 
209 struct bpred_update { 
210 char *pdir1;   /* direction-1 predictor counter */ 
211 char *pdir2;   /* direction-2 predictor counter */ 
212 char *pmeta; /* meta predictor counter */ 
213 struct  {    /* predicted directions */ 
/****** ^^^^ --- NO NAME HERE -- THIS IS WHAT YOU MUST CHANGE */ 
214 uint bimod : 1; /* bimodal predictor */ 
215 uint twolev : 1; /* 2-level predictor */ 
216 uint meta : 1; /* meta predictor (0..bimod/1..2lev) */ 
217 } dir; 
218 }; 

我懷疑這是因爲一個「符限定符列表」聽起來像一個令牌,該令牌是像struct dim = {0};一部分。

+0

uint沒有定義,原因是.. – 2011-05-05 19:58:31

1

在C,內部結構是不允許有名字,這是因爲你需要如何引用結構C常:

struct A { 
    ... 
}; 

struct B { 
    struct A my_a; 
}; 

因此不清楚天真的C編譯器,如果它是應該期待變量或類型聲明。

然而,這是一個使用C++編譯器的情況,它可以像你期望的那樣工作,因爲C++不希望結構前綴用於變量減速。

解決方案是從內部結構中刪除名稱,或者將其聲明在其他結構之外。

+0

這個問題是特定於任何g ++版本的?我檢查包,似乎沒有必要移動內部結構。 > dir_update_ptr-> dir.meta =(* meta> = 2); – 2011-05-03 21:37:09

+0

對不起,我沒有按照你的問題......首先,原來的問題是關於C而不是C++,g ++是C++編譯器,而不是C編譯器。另外,你是什麼意思,不需要移動內部結構?你沒有收到編譯器錯誤?無論如何,這只是解決原始編譯器錯誤的兩個選項之一。 – Arelius 2011-05-03 21:42:05

+0

謝謝,uint定義丟失:-) – 2011-05-05 19:59:01