2011-08-23 106 views
0

我正在制作一个C程序,它需要访问结构中的结构数组。无法访问结构数组中的成员变量结构

定义看起来像下面

在主函数
struct def_world 
{ 
    bool lock; 
    char tilemap; 
    def_tile tile[100][100]; 
struct def_tile 
{ 
    bool lock; 
    char kind; 
    def_obj * obj; 
    void * evt; 
}; 
struct def_obj 
{ 
    bool lock; 
    int indexOfTable; 
    bool frozen; 
    char x,y; 
    char kind; 
    char face; 
    char * msg; 
    char * ip; 
}; 

,我想访问世界tile[3][3]的OBJ的脸。

我初始化世界

def_world world={0,}; 

但以下行犯错误

world.tile[3][3].obj=newobj();//newobj() returns def_obj type 

world.tile[3][3].obj->face; 

任何想法如何访问OBJ的脸?

+0

至少要显示'newobj()'的声明,知道它是否返回一个'def_obj'对象或一个'def_obj *'指向'def_obj'的指针是很重要的。实际上,为什么不发布一个能够产生错误的可编辑示例 - 它不应该比现在更多,但它不需要人们猜测拼写错误(请使用copy-n-paste - 不要在SO编辑框中重新输入)。 –

+0

使用VS2010对我来说很好(并且颠倒了结构的声明顺序)。另外,这是C++不是C,C中没有'bool'。也许'newobj'被定义为'def_obj newobj()'而不是'def_obj * newobj()'? – Skizz

+0

的事情是,我的VS2010说,当我刚刚完成键入world.tile [3] [3]有什么错误吗? –

回答

1

尝试这些行来代替:

world.tile[3][3]->obj=newobj();//newobj() returns def_obj type 

world.tile[3][3]->obj.face; 

说明:
world.tile[3][3]def_tile。它的 obj字段不是 def_obj,而是 def_obj*。因此,要获得它指向的 def_obj,您应该使用 ->obj
Inside def_obj,face只是一个char,所以你可以用 .face来访问它。

+0

-1这是不正确的。你已经倒过来了。 OP有它的权利。 –

+0

@Chris:你当然是对的。第二次,这种情况发生在我身上今天=/ –

+2

别担心,我们都有脑力激荡。我甚至会退还你的代表。 ;) –