【问题标题】:error: no matching member function for call to 'reset' (shared pointers)错误:没有匹配的成员函数调用“重置”(共享指针)
【发布时间】:2015-08-03 19:59:58
【问题描述】:
template<typename T>
struct Node{
      ListNode(SkipListKind kind, const T& key);
      std::shared_ptr<ListNode<T>> next;
}

一个指向节点的共享指针已经被初始化(称为节点),并且它的下一个成员变量被设置为 NULL。

node->next.reset(std::make_shared<ListNode<T>>(SkipListKind::PosInf, T{}));

错误: 错误:没有匹配的成员函数调用“重置”(共享指针)

在类型方面: std::shared_ptr>.reset(std::make_shared>)

我使用 .reset 是因为指针最初指向 NULL。 为什么我会收到此错误? 有人可以帮忙吗?

谢谢!

【问题讨论】:

  • 您可以改用swap,或者使用赋值。 reset 采用原始指针。
  • 哦,对了。非常感谢先生!

标签: c++ pointers makefile initialization shared-ptr


【解决方案1】:

std::shared_ptr::reset() 函数需要一个原始指针作为参数。

您可以使用赋值运算符来解决您的问题:

node->next = std::make_shared<ListNode<T>>(SkipListKind::PosInf, T{}));

如果您更喜欢交换,请执行以下操作:

std::make_shared<ListNode<T>>(SkipListKind::PosInf, T{}).swap(node->next);

【讨论】:

  • std::move 是完全多余的,make_shared 返回一个右值,因此无论如何它都会被移动分配。而且你不能用右侧的右值交换,你需要做make_shared&lt;ListNode&lt;T&gt;&gt;(...).swap(node-&gt;next)
猜你喜欢
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多