首页 > 解决方案 > VS2017 模板类头文件中的 std::shared_ptr 没有智能感知

问题描述

我是 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->

现在,如果它是一个原始指针(我使用原始指针进行了测试),智能感知将显示可用的成员和方法。但是对于 std::shared_ptr 智能感知不起作用,我唯一看到的是 std::shared_ptr 本身的方法(operator*例如)。我想知道我做错了什么?

此外,如果我输入(*prev).VS2017 只会告诉我:

IntelliSense:“没有可用的成员”

顺便说一句,它在 main.cpp 中工作,只是在头文件中不起作用,这很痛苦,因为我必须经常检查头文件,所以我想知道我对智能指针做错了什么。

标签: c++visual-studio-2017

解决方案


推荐阅读