gpt4 book ai didi

c - 如何在 C 中隐藏结构的某些字段?

转载 作者:太空狗 更新时间:2023-10-29 16:29:10 24 4
gpt4 key购买 nike

我正在尝试实现一个 struct person,我需要隐藏一些字段或使它们保持不变。创建私有(private)字段的技巧。

标题:

#pragma once

#define NAME_MAX_LEN 20

typedef struct _person {
float wage;
int groupid;
} Person;

const char const *getName (Person *p);
int getId (Person *p);

/// OTHER FUNCTIONS

来源

#include "person.h"


struct _person
{
int id;

float wage;
int groupid;

char name[NAME_MAX_LEN];
};

/// FUNCTIONS

GCC 表示 person.c:7:8: error: redefinition a 'struct _person' struct _person

我可以在标题中写这个,但在它之后,我不能使用结构的字段。

typedef struct _person Person;

最佳答案

一个结构不能有多个相互冲突的定义。因此,您无法创建隐藏某些字段的结构。

可以做什么,但是它声明该结构存在于 header 中而不定义它。然后,调用者只能使用指向该结构的指针并在您的实现中使用函数来修改它。

例如,您可以按如下方式定义 header :

typedef struct _person Person;

Person *init(const char *name, int id, float wage, int groupid);

const char *getName (const Person *p);
int getId (const Person *p);
float getWage (const Person *p);
int getGroupid (const Person *p);

您的实现将包含:

#include "person.h"

struct _person
{
int id;

float wage;
int groupid;

char name[NAME_MAX_LEN];
};

Person *init(const char *name, int id, float wage, int groupid)
{
Person *p = malloc(sizeof *p);
strcpy(p->name, name);
p->id = id;
p->wage= wage;
p->groupid= groupid;
return p;
}

...

关于c - 如何在 C 中隐藏结构的某些字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55307489/

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