如何解决此循环include
How to resolve this cyclic include?
我遇到了这种情况,但无法解决,将非常感谢任何提示
//in file Common.h
#ifndef _COMMON_H_
#define _COMMON_H_
#include "Node.h"
template <typename T>
struct Ptr
{
typedef std::tr1::shared_ptr< Node<T> > NodeSPtr;
};
#endif
// in file Node.h
#ifndef _NODE_H_
#define _NODE_H_
#include "common.h"
template < typename T >
class Node
{
T data;
Ptr<T>::NodeSPtr next;
};
#endif
鸡蛋和鸡肉的问题。:)
Common.h 中节点的注释声明
//in file Common.h
template <typename T>
class Node;
template <typename T>
struct Ptr
{
typedef std::tr1::shared_ptr< Node<T> > NodeSPtr;
};
// in file Node.h
#include "common.h"
template < typename T >
class Node
{
T data;
Ptr<T>::NodeSPtr next;
};
使用正向声明和typename
的组合。此外,包括警卫也不会有错;)
节点.h:
#ifndef Node_h
#define Node_h
template <typename T> struct Ptr;
template <typename T>
class Node {
T data;
typename Ptr<T>::NodeSPtr next;
};
#endif
Common.h:
#ifndef Common_h
#define Common_h
#include <memory>
template <typename T> class Node;
template <typename T>
struct Ptr {
typedef std::shared_ptr< Node<T> > NodeSPtr;
};
#endif
现在,您可以按任何顺序多次包含这些标头。
只要您不以需要知道Node
大小的方式访问NodeSPtr
指针对象,您就可以在Common.h中声明Node
。
此外,可以说std::shared_ptr
,而不是std::tr1::shared_ptr
。
我会:
//in file Common.h
#include "Node.h"
template <typename T>
struct Ptr
{
typedef Node::NodeSPtr NodeSPtr;
};
// in file Node.h
template < typename T >
class Node
{
T data;
typedef std::tr1::shared_ptr< Node<T> > NodeSPtr;
NodeSPtr next;
};
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 既然存在危险,为什么项目要使用-I include开关
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 如何处理模板类标头中的循环 #include 调用
- 实现递归函数,避免由 C++ 中 include 的循环调用(没有 #pragma 一次)引起的无限循环输入
- 如何避免涉及全局变量的循环 #include?
- C++:由于 #include 循环,无法将对象实例传递给另一个类
- #include 循环依赖项错误
- 如何解决此循环include
- friend函数和include循环
- 无尽的include循环