C++ std::shared_ptr 错误 C2664
c++ std::shared_ptr Error C2664
我正在使用 std::shared_ptr
指向节点
template<typename T>
class A
{
class Node
{
T data;
std::shared_ptr<Node> link;
Node(T data, std::shared_ptr<Node> link);
};
void push(T data);
std::shared_ptr<Node> top;
};
template<typename T>
A<T>::Node::Node(T data, std::shared_ptr<typename A<T>::Node> link) :
data(data), link(link)
{
}
template<typename T>
void A<T>::push(T item)
{
if (top == nullptr)
{
top = std::make_shared<typename A<T>::Node>(new typename
A<T>::Node(item, nullptr));
}
else
{
top = std::make_shared<typename A<T>::Node>(new typename A<T>::Node(item, top));
}
}
生成的声明和定义导致编译器错误
Severity Code Description Project File Line Suppression State
Error C2664 'Stack::Node::Node(const Stack::Node &)': cannot convert argument 1 from 'Stack::Node *' to 'const Stack::Node &' memory 901
我需要更改什么以符合 <memory>
?
std::shared_ptr<T>
的构造函数接受指向您使用 new
创建的 T
的指针。
函数 std::make_shared<T>(args...)
为您执行 new
。您传递给 make_shared
的参数将传递给 T
的构造函数。所以你几乎不应该向它传递一个由 new
创建的指针(除非你真的想 new
一个 T
,然后将该指针作为参数传递以创建另一个 T
!).
例如,而不是:
std::make_shared<typename A<T>::Node>(
new typename A<T>::Node(item, top))
只做:
std::make_shared<typename A<T>::Node>(item, top)
(顺便说一下,您实际上并不需要大多数 typename A<T>::
限定符。只要您在 A<T>
或A<T>::Node
,在 class 定义和 class 成员名称后的成员定义中。没有 typename
的 A<T>::Node
也适用于这些上下文,因为"member of the current instantiation" 规则。)
我正在使用 std::shared_ptr
指向节点
template<typename T>
class A
{
class Node
{
T data;
std::shared_ptr<Node> link;
Node(T data, std::shared_ptr<Node> link);
};
void push(T data);
std::shared_ptr<Node> top;
};
template<typename T>
A<T>::Node::Node(T data, std::shared_ptr<typename A<T>::Node> link) :
data(data), link(link)
{
}
template<typename T>
void A<T>::push(T item)
{
if (top == nullptr)
{
top = std::make_shared<typename A<T>::Node>(new typename
A<T>::Node(item, nullptr));
}
else
{
top = std::make_shared<typename A<T>::Node>(new typename A<T>::Node(item, top));
}
}
生成的声明和定义导致编译器错误
Severity Code Description Project File Line Suppression State Error C2664 'Stack::Node::Node(const Stack::Node &)': cannot convert argument 1 from 'Stack::Node *' to 'const Stack::Node &' memory 901
我需要更改什么以符合 <memory>
?
std::shared_ptr<T>
的构造函数接受指向您使用 new
创建的 T
的指针。
函数 std::make_shared<T>(args...)
为您执行 new
。您传递给 make_shared
的参数将传递给 T
的构造函数。所以你几乎不应该向它传递一个由 new
创建的指针(除非你真的想 new
一个 T
,然后将该指针作为参数传递以创建另一个 T
!).
例如,而不是:
std::make_shared<typename A<T>::Node>(
new typename A<T>::Node(item, top))
只做:
std::make_shared<typename A<T>::Node>(item, top)
(顺便说一下,您实际上并不需要大多数 typename A<T>::
限定符。只要您在 A<T>
或A<T>::Node
,在 class 定义和 class 成员名称后的成员定义中。没有 typename
的 A<T>::Node
也适用于这些上下文,因为"member of the current instantiation" 规则。)