gpt4 book ai didi

c++ - 多个包含错误

转载 作者:行者123 更新时间:2023-11-30 04:11:44 24 4
gpt4 key购买 nike

我是 C++ 的新手,正在尝试包含我制作的两个 .h 文件。 includes 相互访问,因此根据我将它们包含在一个失败或另一个中的顺序。因此,我知道唯一可能的问题是当我去编译“$ g++ main.cpp foo1.cpp foo2.cpp”时它无法读取一个。我使用#IFnDef 是因为我在另一篇文章中看到它解决了问题,但对我来说没有任何改变。有什么想法吗?

最佳答案

如您所见,您不能让两个 header 相互包含。请记住,#include 指令基本上意味着“获取该文件的内容并假装它被粘贴到这里”。如果header1.h开头说包含header2.h的内容,但是header2.h说包含的内容>header1.h 开头,而 header1.h 说(再次)在开头包含 header2.h ......你明白了。

#define/#ifndef 技巧(称为“include guard”)通过只允许每个 header 包含一次来避免无限递归,但这意味着编译器将看到 header1.h 的内容后跟 header2.h 的内容,反之亦然。如果每个 header 中的代码都依赖于另一个 header 中定义的内容,那么无论哪种方式,您最终都会得到引用直到后来才定义的内容的代码。

您可以使用所谓的“前向声明”来避免循环依赖 — 声明直到稍后才完全定义的东西。例如:

// header1.h
#ifndef HEADER1_H
#define HEADER1_H

class Foo; // Declaration only

class Bar { // Definition
private:
// You can have a pointer to a type that's only declared, not defined.
Foo *p_foo;

// ...
};

#endif // ndef HEADER1_H

----

// header2.h

#ifndef HEADER2_H
#define HEADER2_H

#include "header1.h"

class Foo { // Definition
private:
// This requires class Bar to be defined, but that's OK, because it is.
Bar bar;

// ...
};

#endif // ndef HEADER2_H

在此示例中,header1.h 不必包含 header2.h,因为它不需要类的定义 Foo,只是一个声明。 (换句话说,编译器只需要知道名为 Foo 的类存在;它还不需要知道它的成员。)

关于c++ - 多个包含错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20114423/

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