template <typename T>
class linked;
template <typename T>
class node {
...
friend class linked<T>;
};
template <typename T>
class linked {
...
};
请注意,我已向前声明了链接类,以便将其声明为友好的节点类,但现在我想为每个类创建一个不同的.h和.cpp文件。我将如何在其中进行前瞻性声明。
答案 0 :(得分:1)
node.hpp
#pragma once
template <typename T> class linked;
template <typename T> class node {
...
friend class linked<T>;
};
linked.hpp
#pragma once
#include "node.hpp" // just because I guess you will use it in linked implementation
template <typename T> class linked {
...
};
因此,您可以保留使用节点而不包含linked.hpp。您甚至可以将其保留为私有标头,但不会发送给用户。但如果链接某些代码想要使用链接类,只需包含linked.hpp。
修改强> 作为一种选择 node.hpp
#pragma once
template <typename T> class node {
...
class linked;
friend class linked<T>;
};
linked.hpp
#pragma once
#include "node.hpp"
template <typename T> class node<T>::linked {
...
};
答案 1 :(得分:0)
您应该考虑在.h文件中使用模板的完整声明。
如果你需要将它们分开,你可以:
linked.h:
template <typename T>
class linked;
#include "linked_implementation.tpp"
linked_implementation.tpp:
#ifndef LINKED_IMPLEMENTATION_TPP
#define LINKED_IMPLEMENTATION_TPP
template <typename T>
class node {
...
friend class linked<T>;
};
template <typename T>
class linked {
...
};
#endif
根据评论编辑