c++ - Visual Studio 无法识别模板类中的结构

标签 c++ visual-studio templates visual-studio-2013

我正在尝试使用 template 重新实现一个单向链表类。下面是有问题的代码。

template<typename T>
class list
{
private:
    struct node
    {
        node* next;
        T data;

        node( T d ) : next( nullptr ), data( d ) {}
    };
    node* first_node;
    size_t m_size;
public:
    list() : first_node( nullptr ), size( 0 ) {}
    // ...
};

一切正常,直到我尝试使用(即在方法 push_back() 中)node* 类型变量的成员。示例:

void push_back( const T& data ) 
{
    node* temp = first_node;
    while( temp->next )
    {
        temp = temp->next;
    }
    // ...
}

当我输入 temp-> 时,Visual Studio 的 IntelliSense 应该调出一个上下文菜单来显示 node 结构的成员。它没有这样做。此外,当我将鼠标悬停在代码中的 next 单词时,工具提示如下所示:

<unknown> list<T>::node::next

让我说清楚:我没有收到任何调试错误,但我的问题是:为什么 Visual Studio 2013 不能计算这些东西?

最佳答案

这并不意外,也不是错误。您正在编写模板,IntelliSense 解析器不知道下一个 成员属于什么具体 类型。直到稍后在您的代码中实例化一个list<int> .所以它给你它所知道的,它当然知道 temp->nextlist<T>::node并告诉你,只是不是针对哪种特定类型的 list .所以它以<unknown>为前缀.

您当然可以争辩说它应该显示 template class<T> list<T>::node::next反而。不太确定旋转每个人的螺旋桨,或者如果这完全是 EDG 解析器的能力(值得怀疑),您可以在 Connect 提出您的理由。并提交错误报告。

关于c++ - Visual Studio 无法识别模板类中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22477261/

相关文章:

c++ - 为什么空队列的大小在 pop 后会减一?

c++ - 保持对同一实例 C++ 的引用

没有STL的C++动态数组

c++ - 加密/解密字节数组 Crypto++

c++ - 构建调试输出字符串

visual-studio-2010 - Visual Studio - 更好地指示构建状态

c++ - 模板特化中的双模板<>

visual-studio - 在单个 TFS 项目下存储多个产品是个坏主意吗?

c++ - 使用模板创建子类

c++ - 功能的优雅互斥开/关开关?