gpt4 book ai didi

c - 将列表传输到类(class)

转载 作者:行者123 更新时间:2023-11-30 18:02:55 25 4
gpt4 key购买 nike

我有一个检查点列表,然后运行一个函数。我最初在该函数中构建了这个列表,但现在我必须在外部构建它。问题是我无法在实现该函数的类中包含 checkpoint.h ,因为 checkpoint.h 返回该类类型的结构。初始列表在 class.c 中全局声明。如何将外部创建的列表传输到类中以便我可以使用它?

所以我有这个 header ,turing_machine.h:

#ifndef __TURING_MACHINE__ 
#define __TURING_MACHINE__

#include "tape.h"
#include "alphabet.h"
#include "symbol_table.h"

...

#endif

和定义 checkpoint_list 类的 checkpoint.h header :

#ifndef __CHECKPOINT_H__
#define __CHECKPOINT_H__

#include "turing_machine.h"

...

#endif

所以我想从 turing_machine.h 向函数发送一个结构列表 checkpoint 但我无法修改任何内容,因为这就是类必须保持的方式。

我还有turing_machine.c:

#include "turing_machine.h"
#include "checkpoint.h"
#include "symbol_table.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

checkpoint_list *c;

所以一开始我在 turing_machine 中创建了该列表 c,但现在我必须在外部创建它,并且必须初始化该列表 c 但我没有知识。我希望这更清楚。

我错误地使用了“类”这个术语;我只有 .c.h 文件。

最佳答案

从字里行间看,我认为你的麻烦在于你有“相互引用”的结构。

解决这个问题的方法是使用不完整的类型定义:

typedef struct checkpoint_list checkpoint_list;

然后您可以在 turing_machine.h 中使用它:

#ifndef TURING_MACHINE_H_INCLUDED
#define TURING_MACHINE_H_INCLUDED

#include "tape.h"
#include "alphabet.h"
#include "symbol_table.h"

typedef struct checkpoint_list checkpoint_list;

typedef struct turing_machine
{
...
} turing_machine;

extern checkpoint_list *tm_function(turing_machine *);
extern turing_machine *tm_create(const char *);

#endif

并且,在 checkpoint.h 中,您可以编写:

#ifndef CHECKPOINT_H_INCLUDED
#define CHECKPOINT_H_INCLUDED

#include "turing_machine.h"

/* No typedef here in checkpoint.h */
struct checkpoint_list
{
...
};

extern checkpoint_list *cp_function(const char *);
extern turing_machine *cp_machine(checkpoint_list *);

#endif

该技术得到 C 标准(C90,更不用说 C99 或 C11)的认可和定义。

请注意,我还重命名了包含防护;以双下划线开头的名称保留给“实现”(即 C 编译器及其库),您不应在自己的代码中发明和使用此类名称。

关于c - 将列表传输到类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8858267/

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