我正在尝试使用 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 不能计算这些东西?
最佳答案
这并不意外,也不是错误。您正在编写模板,IntelliSense 解析器不知道下一个 成员属于什么具体 类型。直到稍后在您的代码中实例化一个list<int>
.所以它给你它所知道的,它当然知道 temp->next
是 list<T>::node
并告诉你,只是不是针对哪种特定类型的 list
.所以它以<unknown>
为前缀.
您当然可以争辩说它应该显示 template class<T> list<T>::node::next
反而。不太确定旋转每个人的螺旋桨,或者如果这完全是 EDG 解析器的能力(值得怀疑),您可以在 Connect 提出您的理由。并提交错误报告。
关于c++ - Visual Studio 无法识别模板类中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22477261/