Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何解决这个问题?_C++_Templates_Typedef - Fatal编程技术网

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岁时)和接受有用的答案来表达你对他人帮助你的感激之情。