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

Vic*_*tor 1 c++ templates visual-studio visual-studio-2013

我试图用templates 重新实现一个单链表列表.下面是有麻烦的代码.

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 ) {}
    // ...
};
Run Code Online (Sandbox Code Playgroud)

一切都很好,直到我尝试使用(即在方法中push_back())node*类型变量的成员.例:

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

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

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

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

Han*_*ant 9

这不是意料之外的,也不是错误.您正在编写模板,IntelliSense解析器不知道下一个成员属于哪种具体类型.直到您在代码中稍后实例化之后才能知道,比如a .所以它给了你它所知道的东西,它肯定知道这是一个并且告诉你,只是不是针对哪种特殊的.所以它是前缀.list<int>temp->nextlist<T>::nodelist<unknown>

你当然可以争辩说它应该显示出来template class<T> list<T>::node::next.不太确定旋转每个人的螺旋桨,或者如果这完全是EDG解析器的功能(可疑),你可以在Connect上提出你的案例并提交错误报告.