template <typename T>
class linked;
template <typename T>
class node {
...
friend class linked<T>;
};
template <typename T>
class linked {
...
};
请注意,我已经向前声明了链接类,以便将其声明为友好的节点类,但现在我想为每个类制作不同的 .h 和 .cpp 文件。我将如何在其中进行前向声明。
最佳答案
节点.hpp
#pragma once
template <typename T> class linked;
template <typename T> class node {
...
friend class linked<T>;
};
链接.hpp
#pragma once
#include "node.hpp" // just because I guess you will use it in linked implementation
template <typename T> class linked {
...
};
因此您可以在不包含 linked.hpp 的情况下继续使用节点。您甚至可以将其保留为私有(private) header 并且不会发送给用户。但是如果链接某些代码想要使用链接类,只需包含 linked.hpp。
编辑 作为一种选择 节点.hpp
#pragma once
template <typename T> class node {
...
class linked;
friend class linked<T>;
};
链接.hpp
#pragma once
#include "node.hpp"
template <typename T> class node<T>::linked {
...
};
关于c++ - .h 文件中的转发声明以使用友好类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46077436/