C++ 如何解决这个问题?
我遇到这种情况,但无法解决,任何提示都将不胜感激C++ 如何解决这个问题?,c++,templates,typedef,C++,Templates,Typedef,我遇到这种情况,但无法解决,任何提示都将不胜感激 //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 _N
//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文件中
#如果没有共同点_
#定义(公共)_
#包括“Node.h”
模板
结构Ptr
{
typedef std::tr1::shared_ptrNodeSPtr;
};
#恩迪夫
//在Node.h文件中
#ifndef\u节点\u H_
#定义节点_
#包括“common.h”
模板
类节点
{
T数据;
Ptr::NodeSPtr next;
};
#恩迪夫
鸡蛋和鸡的问题。:)
注意公共节点的声明。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;
};
//在Common.h文件中
模板
类节点;
模板
结构Ptr
{
typedef std::tr1::shared_ptrNodeSPtr;
};
//在Node.h文件中
#包括“common.h”
模板
类节点
{
T数据;
Ptr::NodeSPtr next;
};
我会:
//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;
};
//在Common.h文件中
#包括“Node.h”
模板
结构Ptr
{
typedef节点::NodeSPtr NodeSPtr;
};
//在Node.h文件中
模板
类节点
{
T数据;
typedef std::tr1::shared_ptrNodeSPtr;
NodeSPtr next;
};
只要您访问节点的方式不需要知道节点的大小,您就可以只声明节点
另外,可以说std::shared_ptr
,而不是std::tr1::shared_ptr
使用前向声明和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
\ifndef节点
#定义节点
模板结构Ptr;
模板
类节点{
T数据;
typename Ptr::NodeSPtr next;
};
#恩迪夫
共同点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
\ifndef Common\u h
#定义公共_h
#包括
模板类节点;
模板
结构Ptr{
typedef std::shared_ptrNodeSPtr;
};
#恩迪夫
您现在可以按任意顺序多次包含这些标题。@AayushPoudel-Hmm。。。如果它有帮助,你应该接受它。或者,如果其他答案更有帮助,你应该接受其他答案。在任何情况下,你都应该通过向上投票(当你的声誉达到15岁时)和接受有用的答案来表达你对他人帮助你的感激之情。