我正在尝试使用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
单词悬停在我的代码中时,工具提示如下所示:
让我说清楚:我没有收到任何调试错误,但我的问题是:为什么Visual Studio 2013无法计算这些内容?
答案 0 :(得分:9)
这不是意料之外的,也不是错误。您正在编写模板,IntelliSense解析器不知道下一个成员所属的具体类型。在您实例化代码中的以后之前无法知道,例如list<int>
。因此,它为您提供了它所知道的内容,它确实知道temp->next
是list<T>::node
并告诉您,而不是针对哪种list
。所以它前缀为<unknown>
。
你当然可以争辩说它应该显示template class<T> list<T>::node::next
。不太确定旋转每个人的螺旋桨,或者如果这完全是EDG解析器的能力(可疑),你可以在Connect提出你的案例并提交错误报告。