gpt4 book ai didi

C++ 多重包含烦恼

转载 作者:搜寻专家 更新时间:2023-10-31 00:59:23 26 4
gpt4 key购买 nike

所以我正在编写一个已经足够大的程序,现在它有几个独立的源文件,因此有几个独立的头文件。我不断遇到多个包含问题。

问题是我在链接它们之前编译了所有单独的文件。所以,A.cpp 和 B.cpp 都包含 Z.h,因为 A.cpp 和 B.cpp 都使用函数声明和存在于 Z.h 内部的函数声明。在编译阶段这一切都很好,因为一切都井井有条,但是当我将 A.o 和 B.o 链接在一起时,编译器(链接器)抛出多个定义错误,因为它在编译每个时都包含 Z.h 的函数定义.o 文件,因此它们存在于两个 .o 文件中。这通常可以通过使用包含防护来避免,但在这种情况下,它们将不起作用,因为每个 .cpp 文件都是单独编译的,编译器会“忘记”定义的预处理器变量的状态。

所以我的问题是,这在现实世界中是如何解决的?我已经进行了很好的挖掘,并且已经干涸了,但我确信这之前一定已经解决了。

谢谢!

最佳答案

So, A.cpp and B.cpp both include Z.h, because both A.cpp and B.cpp use function declarations and the such which exist inside of Z.h

这在技术上不可能是正确的,或者至少是一个不完整的描述。 Z.h 很可能不仅包含函数声明,而且还包含函数定义

函数声明:

void f();

函数定义:

void f() { std::cout << "doing something\n"; }

So my question is, how is this solved in the real world?

您通过将声明保留在 Z.h 中并将定义移动到另一个待创建的 Z.cpp 文件中来解决此问题。

关于C++ 多重包含烦恼,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33441748/

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