0

我试图通过一个结构来更改一个 int 变量,该结构将一个指向其他结构的指针固定为一个字段是该变量的结构。我在编译中收到一个警告和一个错误。任何人都可以解释为什么以及如何使用此代码进行操作?

代码是:

typedef struct
{
    struct TEEC_Session *ptr_struct;
} Context_model;

typedef struct
{   int t_S;    
} Session_model;

void Attribution(Context_model* context,Session_model* session )
{
    (*context).ptr_struct = session;  

}

void change_t_S(Context_model* context )
{
    (*(*context).ptr_struct).t_S = 5; // I Want to change t_S to 5 using only the 

context structure

} 

main()
{
Context_model context;
Session_model session;

Attribution(&context,&session);

// Now I want to change t_S using the context 
change_t_S(&context);
}
4

3 回答 3

0

我展示了带有附加声明和指针取消引用习语的代码。

这在 C、HTH 中编译正常。

struct TEEC_Session;

typedef struct
{ struct TEEC_Session *ptr_struct;
} Context_model;

typedef struct TEEC_Session
{ int t_S;
} Session_model;

void Attribution(Context_model* context,Session_model* session )
{
    context->ptr_struct = session;
}

void change_t_S(Context_model* context )
{
    context->ptr_struct->t_S = 5; // I Want to change t_S to 5 using only the context structure
}

int main_change_var(int argc, char **argv)
{
    Context_model context;
    Session_model session;

    Attribution(&context,&session);

    // Now I want to change t_S using the context
    change_t_S(&context);

    return 0;
}
于 2012-07-26T16:58:54.350 回答
0

修改 Context_model 的定义为

typedef struct
{
    Session_model *ptr_struct;
} Context_model;

并将其移至 Session_model 的定义下方。

struct TEEC_Session 未在您的代码中定义。

于 2012-07-26T16:42:45.570 回答
0

您声明您ptr_struct具有struct TEEC_Session *类型,但随后尝试将其用作Session_model *类型指针。这是一个明显的类型不匹配。那是没有意义的。

是什么struct TEEC_SessionTEEC_Session在您的整个程序中没有其他提及。为什么您将您的ptr_struct字段声明为指向某个完全随机的现成类型的指针struct TEEC_Session,然后完全忘记它的存在struct TEEC_Session

如果你的struct TEEC_Session类型应该是Session_model类型的同义词,你应该告诉编译器。例如,您可以声明Session_model

typedef struct TEEC_Session
{   
   int t_S;    
} Session_model;

一切都会按预期工作。

TEEC_Session或者,您可以通过重新排序声明来完全摆脱任何引用

typedef struct
{   
  int t_S;    
} Session_model;    

typedef struct
{
  Session_model *ptr_struct;
} Context_model;

最后,您在代码中使用了 C99 风格的注释 ( //)。C99 不允许声明没有显式返回类型的函数。main()应该是int main()

于 2012-07-26T16:47:07.073 回答