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单词悬停在我的代码中时,工具提示如下所示:

让我说清楚:我没有得到任何调试错误,但我的问题是:为什么Visual Studio 2013不能计算这些东西?
这不是意料之外的,也不是错误.您正在编写模板,IntelliSense解析器不知道下一个成员属于哪种具体类型.直到您在代码中稍后实例化之后才能知道,比如a .所以它给了你它所知道的东西,它肯定知道这是一个并且告诉你,只是不是针对哪种特殊的.所以它是前缀.list<int>temp->nextlist<T>::nodelist<unknown>
你当然可以争辩说它应该显示出来template class<T> list<T>::node::next.不太确定旋转每个人的螺旋桨,或者如果这完全是EDG解析器的功能(可疑),你可以在Connect上提出你的案例并提交错误报告.