gpt4 book ai didi

c - 为什么我不能创建不透明数据类型?

转载 作者:太空宇宙 更新时间:2023-11-04 01:43:58 24 4
gpt4 key购买 nike

我正在尝试使用不透明数据类型进行试验以了解它们。主要问题是我不断收到“不完整”错误。

ma​​in.c

#include <stdio.h>
#include <stdlib.h>
#include "blepz.h"

int main()
{
setfnarp(GOO,5);
int loogaboo = getfnarp(GOO);

printf("%i", loogaboo);
return 0;
}

fnarpishnoop.c

#include "blepz.h"

struct noobza {
int fnarp;
};

void setfnarp(struct noobza x, int i){
x.fnarp = i;
};

int getfnarp(struct noobza x){
return x.fnarp;
};

blepz.h

struct noobza;

void setfnarp(struct noobza x, int i);

int getfnarp(struct noobza x);

struct noobza GOO;

我显然不明白这里的某些东西,我希望有人能帮助我弄清楚不透明数据类型是如何实现的,如果它们的全部意义在于您很难找到它们的实际代码。

最佳答案

正如您已经提到的,使用您尚未声明其内容的 struct 会产生“不完整类型”错误。

相反,使用指向 struct 的指针和返回指向 struct 的指针的函数,如下所示:

struct noobza;

struct noobza *create_noobza(void);

void setfnarp(struct noobza *x, int i);

int getfnarp(struct noobza *x);

struct noobza *GOO;

...

#include <stdlib.h>
#include "blepz.h"

struct noobza {
int fnarp;
};

struct noobza *create_noobza(void)
{
return calloc(1, sizeof(struct noobza));
}

void setfnarp(struct noobza *x, int i){
x->fnarp = i;
};

int getfnarp(struct noobza *x){
return x->fnarp;
};

...

#include <stdio.h>
#include <stdlib.h>
#include "blepz.h"

int main()
{
GOO = create_noobza();
setfnarp(GOO,5);
int loogaboo = getfnarp(GOO);

printf("%i", loogaboo);
return 0;
}

关于c - 为什么我不能创建不透明数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57446226/

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