【问题标题】:Can't access struct fields无法访问结构字段
【发布时间】:2014-06-20 18:03:42
【问题描述】:

我在这里做错了吗:

我有 2 个structs:

typedef struct Boundaries{
    int f[11];
    int t[11];
    int d[11];
} boundaries;

typedef struct STNODE {
    char name;
    int addr;
    const char* type;
    int  _size;
    boundaries b;
    int cell_size;
} stnode;

我创建了一个 stnode 数组:

stnode ST[24];

当我尝试访问stnode 的字段时(即通过点'.'),我得到所有字段name,addr,type,_size,b,@987654333 @。问题是我无法访问b 的字段。这个表达式:

ST[i].b.

打开stnode 的变量。难道不应该让我从b的变量中进行选择吗? (f[],t[],d[])

谢谢

编辑:

对于那些不明白我所说的“打开变量”是什么意思的人,这里有一个快照:

【问题讨论】:

  • 这是什么意思“打开变量”?只需键入变量名并编译代码。如果没有编译,贴出代码和编译错误。
  • 假设基于'打开变量'你在谈论自动完成,不是吗?加号代码块也被标记。
  • 如果你自己写表达式(ST[i].b.f[1]),它会编译吗?
  • 好吧,伙计们,我尝试编写忽略自动完成的表达式,并编译。我猜这是代码块中的一个愚蠢的错误。如果发生有关此的运行时错误,我将重新发布。谢谢

标签: c codeblocks


【解决方案1】:

哦,现在我知道这是怎么回事了。

Code::Blocks 自动完成功能很糟糕,它永远不会做你想做的事。如果它做到了它应该认为自己很幸运。 5 年来我一直在使用 code::blocks 来制作复杂的项目,并且由于任何原因,大多数功能对我来说都失败了。 例如,错误跟踪,当您双击编译错误时,它会将您带到文件和发生错误的行,如果源的路径是相对路径,这将不起作用。 我要说的是解析不是最好的,我什至看到自动完成系统在引擎盖下崩溃拒绝显示帮助,我不得不重新启动以使其再次工作。

除了这些之外,一些 idoms 会影响自动完成处理事情的方式。 最直接的方法之一是 perprocessor,如果预处理器指令处理定义并且您必须明确指定自动完成将忽略它。检查自动完成系统是否存在问题的一种方法只需将您在问题中的定义直接复制到您正在使用的文件中(如果它不存在)。如果它在那里不起作用,你就无能为力了。如果它确实有效,您应该检查包含这些定义的方式和位置,因为某些预处理器指令可能只是将其敲掉,使其对自动完成系统不可见。

【讨论】:

    猜你喜欢
    • 2010-11-03
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    相关资源
    最近更新 更多