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。

http://en.cppreference.com/w/c/language/scope