2011-05-03 136 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