gpt4 book ai didi

c++ - 在源文件中包含类而不是 header

转载 作者:行者123 更新时间:2023-11-28 00:50:26 25 4
gpt4 key购买 nike

我有 3 个类:

A类.h

ClassA
{
public:
ClassA();
};

B类.h

#include "ClassA.h"

classB
{
public:
ClassB();

private:
ClassA m_classA;
};

类C.h

#include "ClassB.h"

ClassC
{
public:
ClassC();

private:
ClassB m_classB;
};

C 类需要 B 类,B 类需要 A 类。 ClassC 不需要 ClassA,所以我应该将 ClassB header 中的 #include "ClassA.h"放在源文件中并创建一个全局对象还是有更好的方法?

B类.cpp

#include "ClassB.h"
#include "ClassA.h"

ClassA g_classA;

最佳答案

ClassB 有一个ClassA 对象,所以它的类声明需要ClassA 的完整声明。因此您需要在 ClassB.h* 中包含 ClassA.h header ,而不管 ClassC 会发生什么.

如果你想避免包含 header ,你可以做的是存储一个指向 classA 的(智能)指针并转发声明它。那么你只需要在classB.cpp中包含classA.h。这是一个简单的例子:

A.h

class A {};

B.h

#include <unique_ptr>

class A; // forward declaration of A

class B {
public:
B();
private:
std::unique_ptr<A> a_; // C++11 smart pointer expressing unique ownership
};

B.cpp

#include "B.h"
#include "A.h" // we need the full declaration here.

B::B() : a_(new A()) {}

* 严格来说,ClassA.h 可以包含在其他文件中,只要它间接包含在 ClassB.h 中即可。但最好在需要的地方包含你需要的东西,而不是依赖于间接包含。

关于c++ - 在源文件中包含类而不是 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14388281/

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