Visual Studio中使用range-based for循环时出现Intellisense错误

3

我的Visual Studio 2015 IDE(社区版)不断抱怨以下代码

struct item
{
    int data;
    std::vector<item*> linkedItems;
};

void traverseLinkedItems(item* p_item)
{
    for (item* i : p_item->linkedItems) // Intellisense Error: A value of type "item*" cannot be used to initialize an entity of type "item*"
    {
        std::cout << i->data;
    }
}

它可以顺利编译。所以我不确定是VS中的一个bug,还是我漏掉了什么?当我使用auto而不是显式地指定i的类型时,一切都没问题。

谢谢!


当您使用 auto i 时,当您将鼠标悬停在 i 上时,工具提示会显示什么? - David Thomas
如果您更改“data”和“item”的名称,这种情况是否仍会发生? - David Thomas
@david 更改名称没有帮助。这是工具提示的内容:typedef item *std::_Simple_types<item *>::value_type TEMPLATE CLASS_Simple_types - Michal
1个回答

2

IntelliSense并不总是正确的。为了完全了解您的代码,它必须完全编译它,但这样做会太慢而无法方便地使用。相反,它以更快但不完整的方式解析您的代码,以获取自动完成信息和查找明显的错误。然而,有时它会因为某些原因而出错,可能是由于漏洞或者没有获取到所需的全部信息。当发生这种情况时,其输出就不是那么(Intelli)理智了。

我建议忽略IntelliSense错误,或者像你说的那样,使用auto代替item*来消除错误。也许在稍后的更新或代码更改之后,错误就会神奇地消失。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接