错误C2664:无法转换&#39; Node <int> *&#39;到&#39; int&#39; </int>

时间:2014-03-13 21:02:55

标签: c++ templates type-conversion

Node.h:

#include <memory>
using namespace std;

template <typename T>
class Node
{
  private:
     T m_Data;
     shared_ptr<Node<T>> pre_node,next_node;

  public:
     Node(T iData, Node* pre_ptr = nullptr, Node* next_ptr = nullptr) 
       :m_Data(iData),pre_node(make_shared<Node>(pre_ptr)),
        next_node(make_shared<Node>(next_ptr))
};

的main.cpp

#include "Node.h"

int main()
{
   Node<int> head(1);

   system("pause");

   return 0;
}

尝试运行代码时出错:

 error C2664: 'Node<int>::Node(const Node<int> &) throw()' : cannot convert argument 1   
 from 'Node<int> *' to 'int'

有人可以解释问题以及解决问题的方法吗?

1 个答案:

答案 0 :(得分:2)

问题很可能是调用std::make_shared

make_shared<Node>(next_ptr)

在这里,参数应该是Node或者可以用来构造一个的参数(例如,T或者特别是在你的情况下,int。)你是通过Node*

不要通过Node*。通过intNode。或者将构造函数更改为以下内容:

 Node(T iData, shared_ptr<Node> pre_ptr = nullptr, shared_pre<Node> next_ptr = nullptr) 
   : m_Data(iData),
     pre_node(pre_ptr),
     next_node(next_ptr)