VS2017中的模板类头文件中的std :: shared_ptr没有智能感知

时间:2018-07-12 21:14:33

标签: c++ visual-studio-2017

我是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中工作,只是不能在头文件中工作,这很痛苦,因为我不得不经常检查头文件,所以我想知道我对智能指针做错了什么。

0 个答案:

没有答案