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'
有人可以解释问题以及解决问题的方法吗?
答案 0 :(得分:2)
问题很可能是调用std::make_shared
:
make_shared<Node>(next_ptr)
在这里,参数应该是Node
或者可以用来构造一个的参数(例如,T
或者特别是在你的情况下,int
。)你是通过Node*
。
不要通过Node*
。通过int
或Node
。或者将构造函数更改为以下内容:
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)