c++ - .h 文件中的转发声明以使用友好类

标签 c++ linked-list forward-declaration

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/

相关文章:

c++ - 在链接列表中插入时出现 SIGSEGV 错误

c++ - 如何在 C++ 中为前向声明类型实现一元运算符重载?

c++ - 试图解决我的双端队列类和树类之间的循环引用错误

c++ - 适用于 C++ 的良好 Windows 注册表包装器

c++ - 有没有办法从此 sql 语句和逻辑中删除 select count(*)

c++ - boost::filesystem 递归获取每个文件的大小

c++ - 在 C++ 中转换为 double 时处理异常

java - LinkedList 类似数据库 ORM lite

c++ - C++ 中的前向声明——什么时候重要?

c++ - 返回节点指针的函数