【问题标题】:request for member '' in something not a structure of union在非工会结构中请求成员“”
【发布时间】:2014-05-31 15:58:14
【问题描述】:

很抱歉写了一个新问题,因为它包含其他相同的问题,但我在这里找不到问题所在:(有人可以帮忙吗?

我的代码是

typedef struct First_s
{
    double a;
    double b, c;
    double d;
} First_t;

typedef struct Second_s
{
    char e[10];
    long f;        
    First_t g; 
} Second_t;

int compare(Second_t *x, Second_t *y)
{
    if(x.g.b >y.g.b){
    }
    return 0;
}

但它给了我一个错误:

在非联合结构中请求成员“g”

【问题讨论】:

    标签: c struct compare


    【解决方案1】:

    当您应该使用 -> 访问结构字段时,您正在使用 .

    由于xy 是指针,因此您不能直接使用. 访问它们,除非您首先使用星号(*) 运算符取消引用,即(*x).g.b 有效。但是没有人这样做,典型的方法是使用 -> 运算符,因为它就是为此而存在的。

    另外,compare() 函数不应该修改它的参数,所以它们应该是常量指针:

    int compare(const Second_t *x, const Second_t *y)
    {
      /* code here */
    }
    

    【讨论】:

    • 谢谢,我想给 +1,但我的声誉远低于 15 :(
    【解决方案2】:

    x 是一个指向结构体的指针。要检索指针的内容,您需要先取消引用它(并检查它是否不是NULL):

    int compare(Second_t *x, Second_t *y)
    {
        if(x->g.b >y->g.b){
        }
        return 0;
    }
    

    【讨论】:

    • 谢谢,我想给 +1,但我的声誉远低于 15 :(
    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 2021-12-07
    • 1970-01-01
    • 2015-12-20
    • 2016-03-06
    • 1970-01-01
    相关资源
    最近更新 更多