C 使用指针访问不同文件中的结构 - 取消引用指向不完整类型的指针
C accessing structures in different files with pointers - dereferencing pointer to incomplete type
我找不到以下 C 代码的解决方案
我有3个文件如下:
1) story1.c
哪里
struct Example1
{
int first_element;
int second_element;
...
};
int function1(Example1 *m, ...)
{
...
m->first_element = m->second_element;
m->second_element = /* changing int data */;
return /* other integer */;
}
2) story1.h
哪里
typedef struct Example1 Example1;
3) story2.c
哪里
typedef struct Example2 {
Example1 *ptr;
int res2;
...
} Example2;
[...]
static void mother_function(Example2 *s)
{
int res;
res = function1(s->ptr, ...);
}
static void last_function(Example2 *s)
{
if ( ( &(s->ptr)->first_element == 10 ) &&
( (((*s).ptr).second_element) == 44 ) &&
/* other conditions */ )
s->res2 = /* new value */;
}
mother_function 调用设置 m->first_element 和 m->second_element 的函数 1,例如10 和 44
现在我想 last_function 从指针 s 开始访问这些新生的 [在另一个文件的 function1] 值来评估 if [从概念上讲我想做这样的事情:
if( (s->ptr->first_element==10) && (s->ptr->second_element==44) ) then...
我尝试用 3 种方式来完成它:
1) s->ptr->first_element
2) ( &(s->ptr)->first_element == 10 )
3) ( (((*s).ptr).second_element) == 44 )
编译器给了我以下错误:
1) error: dereferencing pointer to incomplete type
2) error: dereferencing pointer to incomplete type
3) error: request for member ‘second_element’ in something not a structure or union
出现这些消息的原因是什么?我该如何实际解决这个问题?
提前感谢那些愿意提供帮助的人
您需要将 struct Example1 { ... };
行从 story1.c
移动到 story1.h
(并确保 story2.c
包括 story1.h
)以便 story2.c
将有权访问 struct Example1
的定义。然后写 s->ptr->first_element
应该可以。
只需对 Jwodder 的解决方案添加一些解释:s->ptr->first_element
正在尝试访问 struct Example1
的成员,但是,struct Example1
是在 story1.c 中定义的,因此它是不可见的story2.c。
我找不到以下 C 代码的解决方案
我有3个文件如下:
1) story1.c
哪里
struct Example1
{
int first_element;
int second_element;
...
};
int function1(Example1 *m, ...)
{
...
m->first_element = m->second_element;
m->second_element = /* changing int data */;
return /* other integer */;
}
2) story1.h
哪里
typedef struct Example1 Example1;
3) story2.c
哪里
typedef struct Example2 {
Example1 *ptr;
int res2;
...
} Example2;
[...]
static void mother_function(Example2 *s)
{
int res;
res = function1(s->ptr, ...);
}
static void last_function(Example2 *s)
{
if ( ( &(s->ptr)->first_element == 10 ) &&
( (((*s).ptr).second_element) == 44 ) &&
/* other conditions */ )
s->res2 = /* new value */;
}
mother_function 调用设置 m->first_element 和 m->second_element 的函数 1,例如10 和 44
现在我想 last_function 从指针 s 开始访问这些新生的 [在另一个文件的 function1] 值来评估 if [从概念上讲我想做这样的事情:
if( (s->ptr->first_element==10) && (s->ptr->second_element==44) ) then...
我尝试用 3 种方式来完成它:
1) s->ptr->first_element
2) ( &(s->ptr)->first_element == 10 )
3) ( (((*s).ptr).second_element) == 44 )
编译器给了我以下错误:
1) error: dereferencing pointer to incomplete type
2) error: dereferencing pointer to incomplete type
3) error: request for member ‘second_element’ in something not a structure or union
出现这些消息的原因是什么?我该如何实际解决这个问题?
提前感谢那些愿意提供帮助的人
您需要将 struct Example1 { ... };
行从 story1.c
移动到 story1.h
(并确保 story2.c
包括 story1.h
)以便 story2.c
将有权访问 struct Example1
的定义。然后写 s->ptr->first_element
应该可以。
只需对 Jwodder 的解决方案添加一些解释:s->ptr->first_element
正在尝试访问 struct Example1
的成员,但是,struct Example1
是在 story1.c 中定义的,因此它是不可见的story2.c。