gpt4 book ai didi

c++ - 编译器循环引用

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

我在代码中定义了两种类型。

typedef struct Project Project;

typedef struct Worker{
Project projects[10];
}Worker;

struct Project{
Worker member[30];
}

编译过程抛出以下错误:

array type has incomplete element type

我认为是因为循环引用,当编译器试图为数组分配空间时,它不知道类型 Project,如果我更改类型的定义顺序,也会发生同样的事情。我对这个问题是否正确?最重要的是,我该如何解决这个问题?

最佳答案

你是对的。您的 Worker 结构按值包含 Project 类型的成员。为了让编译器正确构造 Worker 对象,它需要知道它的大小。这意味着它需要具有 Project 类型的完整定义 - 在您的代码中,它仅在几行之后定义。您可以通过在 Worker 结构中引用/指向 Project 成员并使用前向声明来声明它来解决这个问题,这样编译器就会知道它是一个已知类型(上面的问题可以避免,因为指针的大小与类型无关它指向因此编译器不需要完整的类型定义)。

像这样:

struct Project;  //forward declaration of Project type
typedef struct Worker{
Project *projects[10];
} Worker;

struct Project{
Worker member[30];
}

关于c++ - 编译器循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12991431/

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