Visual Studio 无法识别模板类中的结构
Posted
技术标签:
【中文标题】Visual Studio 无法识别模板类中的结构【英文标题】:Struct inside template class is not recognized by Visual Studio 【发布时间】:2014-03-18 10:56:18 【问题描述】:我正在尝试使用template
s 重新实现一个单链表类。下面是有问题的代码。
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 不能计算这些东西?
【问题讨论】:
总之你的程序完全没有问题,只有VS的GUI?还是我误会了? 我的程序运行正常,所以代码没有问题。问题在于 VS IntelliSense 和 GUI 【参考方案1】:这并不意外,也不是错误。您正在编写一个模板,IntelliSense 解析器不知道 next 成员属于哪个 concrete 类型。直到稍后在你的代码中实例化一个list<int>
,才能知道这一点。所以它给了你它所知道的,它当然知道temp->next
是一个list<T>::node
并告诉你,只是不是针对哪种特定的list
。所以它前缀<unknown>
。
您当然可以争辩说它应该显示template class<T> list<T>::node::next
。不太确定这是否会推动每个人的螺旋桨,或者如果这完全是 EDG 解析器的能力(值得怀疑),您可以在 Connect 提出您的案例并提交错误报告。
【讨论】:
所以你的意思是我的问题没有解决方案,对吧? 我是说你实际上没有问题。因此,当您没有问题时,您当然不需要寻找解决方案。顺便说一句,您从答案中得到这一点非常重要。同样,这不是错误,错误会产生更多噪音。它们填充错误列表窗口并在编辑器窗口中使用红色像素。<unknown>
注释只是意味着“我不知道你打算用这个做什么”。它不是,它是一个模板。千篇一律,需要用做一些有意义的事情,制作饼干。
@HansPassant:它不能显示list<T>::node::next
的原因是它不知道模板类是否是特化的,特化可能有不同的成员,或者是未定义的。以上是关于Visual Studio 无法识别模板类中的结构的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 2015 中无法识别 LocalDB
Visual Studio 数据库项目无法识别 ELASTIC_POOL