我举了下面的例子来说明我的问题:
1)a.h其中声明结构

 a.h
   struct A_Structure;
    typedef struct A_Structure *A_Structure_Ptr;

2)b.c实现结构定义的位置
 #include "a.h"

 struct A_Structure
 {
    int a;
    int b;
    int c;

 };

2)main.c调用结构的位置
#include <stdlib.h>
#include "a.h"

int main ()
{
   struct A_Structure b;
    return 0;

}

但是,由于收到以下错误消息,我无法编译这些C代码:
>main.c(6): error C2079: 'b' uses undefined struct 'A_Structure'

有什么想法吗提前谢谢。
编辑:
#include <stdlib.h>
#include "a.h"

int main ()
{
   struct A_Structure *b=0;
   b=(struct A_Structure*)malloc(12);
   b->a=3;
   free(b);
    return 0;

}

我试着用这种方法创建结构,但还是失败了。

最佳答案

你可能需要这个:

struct A_Structure
{
    int a;
    int b;
    int c;

};

在a.h
这是定义structs时的典型方法
如果要实现opaque pointer,则需要一个实例化A_Structure并返回指针的函数,以及操作A_Structure指针的函数:
在a.h
A_Structure_Ptr CreateA(int a, int b, int c);


void FreeA(A_Structure_Ptr obj);
void SetA_a( A_Structure_Ptr obj, int a );
int  GetA_a( A_Structure_Ptr obj );
// etc.

公元前
A_Structure_Ptr CreateA(int a, int b, int c)
{
     A_Structure_Ptr s = malloc( sizeof(A_Structure) );
     s->a = a;
     s->b = b;
     s->c = c;
}

void FreeA(A_Structure_Ptr obj)
{
    free( obj );
}

void SetA_a( A_Structure_Ptr obj, int a )
{
    obj->a = a;
}

在main.c中
int main ()
{
    struct A_Structure *b = CreateA( 1, 2, 3);
    SetA_a( b, 3 );
    FreeA(b);
    return 0;
}

关于c - 为什么实现文件中的C结构定义不可用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31585590/

10-12 00:12
查看更多