gpt4 book ai didi

c++ - 多次包含头文件c++

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:14 25 4
gpt4 key购买 nike

我有一个关于在 C++ 代码中多次包含头文件的问题。

例如,我有三个类 X、Y、Z。X 和 Y 派生自基类 Z。我想在 Y 中创建 X 的实例。代码将像这样。

class Z { …some code… };

class X: public Z { …some code… }; //here #include header of class Z added

class Y: public Z //here #include header of class Z added as well as of X class
{
private:
X* mX; //instance of X

…some code…
};

所以在这个基类的所有方法的多重定义中出现了。我该如何解决这个问题?

最佳答案

使用“包含守卫”(Wikipedia link)

#ifndef MYHEADER_H
#define MYHEADER_H

// header file contents go here...

#endif // MYHEADER_H

这是惯用的代码,任何经验丰富的 C 和 C++ 程序员都可以轻松识别。将 MYHEADER_H 更改为特定于您的内容,例如,如果 header 定义了一个名为 CustomerAccount 的类,您可以调用守卫 CUSTOMERACCOUNT_H


在您的特定情况下,每个类都有一个单独的头文件/源文件。 Z 类的头文件将包含一个包含保护:

#ifndef Z_H
#define Z_H

// Code of Z class

#endif Z_H

现在,X 和 Y 的 header 都可以安全地包含 z.h - 它只会在包含 x.h 的 .cpp 文件中真正包含一次y.h 并且不会发生重复。

请始终记住,在 C 和 C++ 中,真正编译的是源文件(.c 或 .cpp),而不是头文件。头文件只是由预处理器“复制粘贴”到包含它们的源文件中。

关于c++ - 多次包含头文件c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2832018/

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