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

时间:2014-03-18 10:56:18

标签: 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无法计算这些内容?

1 个答案:

答案 0 :(得分:9)

这不是意料之外的,也不是错误。您正在编写模板,IntelliSense解析器不知道下一个成员所属的具体类型。在您实例化代码中的以后之前无法知道,例如list<int>。因此,它为您提供了它所知道的内容,它确实知道temp->nextlist<T>::node并告诉您,而不是针对哪种list。所以它前缀为<unknown>

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