【问题标题】:can't access a member variable in struct array in struct无法访问结构中的结构数组中的成员变量
【发布时间】: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


【解决方案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。
在def_obj 中,face 只是一个字符,因此您可以使用.face 访问它。

【讨论】:

  • -1 这是不正确的。你把它弄反了。 OP 说得对。
  • @Chris:你当然是对的。这是我今天第二次发生这种情况=/
  • 别担心,我们都有脑残。我什至会退还你的代表。 ;)
猜你喜欢
  • 2017-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 1970-01-01
  • 2019-03-02
相关资源
最近更新 更多