gpt4 book ai didi

c - 为什么实现文件中的C结构体定义不可用?

转载 作者:太空宇宙 更新时间:2023-11-04 00:47:38 25 4
gpt4 key购买 nike

我举下面的例子来说明我的问题:

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;

};

在啊

这是定义 struct 时的典型方法

如果您正在尝试实现 opaque pointer ,您需要一个实例化 A_Structure 并返回指针的函数,以及操作 A_Structure 指针的函数:

在啊

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;
}

在主程序中

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com