我是std :: shared_ptr的新手,并尝试在链表实现中使用它。代码是:
#pragma once
#include <memory>
template <typename T>
class Node
{
public:
Node();
Node(const T& anItem);
Node(const Node& anNode);
T getItem() const;
std::shared_ptr<Node<T>> getNext() const;
std::shared_ptr<Node<T>> getPrev() const;
void setItem(const T& anItem);
void setNext(std::shared_ptr<Node<T>> nextNodePtr);
void setPrev(std::shared_ptr<Node<T>> prevNodePtr);
private:
T item;
std::shared_ptr<Node<T>> next;
std::shared_ptr<Node<T>> prev;
};
template <typename T>
Node<T>::Node(): next(nullptr), prev(nullptr) {}
template <typename T>
Node<T>::Node(const T& anItem) : next(nullptr), prev(nullptr), item(anItem) {}
template <typename T>
Node<T>::Node(const Node& anNode) : next(anNode.getNext()), prev(anNode.getPrev()), item(anNode.getItem()) {}
template <typename T>
T Node<T>::getItem() const
{
return item;
}
template <typename T>
std::shared_ptr<Node<T>> Node<T>::getNext() const
{
return next;
}
template <typename T>
std::shared_ptr<Node<T>> Node<T>::getPrev() const
{
return prev;
}
template <typename T>
void Node<T>::setItem(const T& anItem)
{
item = anItem;
}
template <typename T>
void Node<T>::setNext(std::shared_ptr<Node<T>> nextNodePtr)
{
next = nextNodePtr;
}
template <typename T>
void Node<T>::setPrev(std::shared_ptr<Node<T>> prevNodePtr)
{
prev = prevNodePtr;
}
这在头文件中。在任何这些成员函数中,取消引用共享指针都不会显示成员和方法。
例如,假设我在setPrev()
中键入了以下内容:
prev->
现在,如果它是原始指针(我用原始指针测试过),则intellisense将显示可用的成员和方法。但是对于std :: shared_ptr,Intellisense不起作用,我唯一看到的是std :: shared_ptr本身的方法(例如operator*
)。我想知道我做错了什么?
此外,如果我输入(*prev).
,VS2017会告诉我:
IntelliSense:“没有可用成员”
顺便说一句,它可以在main.cpp中工作,只是不能在头文件中工作,这很痛苦,因为我不得不经常检查头文件,所以我想知道我对智能指针做错了什么。