【发布时间】:2011-08-23 08:55:35
【问题描述】:
我正在做一个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;
};
在main函数中,我想访问world的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 的脸吗?
【问题讨论】:
-
至少显示
newobj()的声明,重要的是要知道它是返回def_obj对象还是def_obj*指向def_obj的指针。实际上,为什么不发布一个可编译的示例来产生你得到的错误 - 它不应该比你现在拥有的多得多,但它会消除人们猜测错别字的需要(请使用 copy-n-paste - 不要在 SO 编辑框中重新输入)。 -
使用 VS2010(并颠倒结构的声明顺序)对我来说效果很好。另外,这是 C++ 而不是 C,C 中没有
bool。也许newobj被定义为def_obj newobj ()而不是def_obj *newobj ()? -
问题是当我刚刚完成打字 world.tile[3][3] 时,我的 VS2010 显示 No Members available 有什么问题吗?
-
我解决了这个问题抱歉;;我困惑的是结构定义顺序。更改订单后,效果很好,感谢 Michael 和 Skizz
-
即使您有解决方案,您能否编辑问题以显示实际声明?您在
struct def_world的声明中缺少};,您指的是在声明它们之前的类型,并且您指的是struct def_tile只是def_tile(这在 C++ 中是合法的,但不是在 C) 中。
标签: c pointers struct member-variables