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

Posted

技术标签:

【中文标题】Visual Studio 无法识别模板类中的结构【英文标题】:Struct inside template class is not recognized by Visual Studio 【发布时间】:2014-03-18 10:56:18 【问题描述】:

我正在尝试使用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 ) 
    // ...
;

一切正常,直到我尝试使用(即在方法 push_back() 中)node* 类型变量的成员。示例:

void push_back( const T& data ) 

    node* temp = first_node;
    while( temp->next )
    
        temp = temp->next;
    
    // ...

当我键入 temp-&gt; 时,Visual Studio 的 IntelliSense 应该会弹出一个上下文菜单来显示 node 结构的成员。它没有这样做。此外,当我将 next 悬停在代码中时,工具提示如下所示:

让我说清楚:我没有收到任何调试错误,但我的问题是:为什么 Visual Studio 2013 不能计算这些东西?

【问题讨论】:

总之你的程序完全没有问题,只有VS的GUI?还是我误会了? 我的程序运行正常,所以代码没有问题。问题在于 VS IntelliSense 和 GUI 【参考方案1】:

这并不意外,也不是错误。您正在编写一个模板,IntelliSense 解析器不知道 next 成员属于哪个 concrete 类型。直到稍后在你的代码中实例化一个list&lt;int&gt;,才能知道这一点。所以它给了你它所知道的,它当然知道temp-&gt;next 是一个list&lt;T&gt;::node 并告诉你,只是不是针对哪种特定的list。所以它前缀&lt;unknown&gt;

您当然可以争辩说它应该显示template class&lt;T&gt; list&lt;T&gt;::node::next。不太确定这是否会推动每个人的螺旋桨,或者如果这完全是 EDG 解析器的能力(值得怀疑),您可以在 Connect 提出您的案例并提交错误报告。

【讨论】:

所以你的意思是我的问题没有解决方案,对吧? 我是说你实际上没有问题。因此,当您没有问题时,您当然不需要寻找解决方案。顺便说一句,您从答案中得到这一点非常重要。同样,这不是错误,错误会产生更多噪音。它们填充错误列表窗口并在编辑器窗口中使用红色像素。 &lt;unknown&gt; 注释只是意味着“我不知道你打算用这个做什么”。它不是,它是一个模板。千篇一律,需要做一些有意义的事情,制作饼干。 @HansPassant:它不能显示list&lt;T&gt;::node::next的原因是它不知道模板类是否是特化的,特化可能有不同的成员,或者是未定义的。

以上是关于Visual Studio 无法识别模板类中的结构的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 2015 中无法识别 LocalDB

Visual Studio:无法识别代码中的引用?

在 Visual Studio 中识别 .tcc 文件?

Visual Studio 数据库项目无法识别 ELASTIC_POOL

Visual Studio 2013 无法识别 javascript [关闭]

Visual Studio 无法识别标准库