C ++ Intellisense使用结构化绑定显示错误,但代码可编译

时间:2019-05-11 15:25:34

标签: c++ visual-studio c++17 intellisense

我已经使用VS很长时间了,在我看来这是一个不错的IDE,但是有时智能感知会中断并报告不存在的错误。通常这些会在一段时间后消失,或者在重建智能感知缓存后消失,但是这一次实际上似乎卡住了。在IDE中的外观:(这是VS2017)

Intellisense errors

将鼠标悬停在名称上作为“位置”时,我会收到类似class "Saturn::Components::Transform" has no member named "position"的消息,尽管它显然有一个消息,但在编译代码时很明显,效果很好。

一段时间以来,我一直在各地更改设置,我不知道如何解决此问题。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

据我所知,IntelliSense是从与Visual C ++编译器使用的前端不同的编译器前端(基于EDG frontent)提供的。因此,不时地会发生IntelliSense认为有效代码与实际编译代码时Visual C ++编译器将接受的代码之间存在差异的情况。例如,当Visual C ++添加了新的实验性功能时,通常不会对IntelliSense进行更新以了解它们并将相应的代码标记为错误的。这也是goes the other way,因为至少从历史上看,EDG前端比Visual C ++具有更好的标准一致性,所以当您实际编译代码时,IntelliSense会认为某些代码有效,而Visual C ++可能会发生这种情况(尽管与过去的Visual C ++几个版本相比,这已经有了显着改善,但是,人们看到的情况越来越少了)。最重要的是,这些前端中的每一个都有各自独立的错误集……

结构化绑定最有可能发生的事情是,您正在使用的VS 2017版本中的IntelliSense根本不支持结构化绑定。据我记得,当他们在VS 2017 Update 3中(或大约那个时候)引入该功能时,这曾经是一个问题。您可能需要考虑将VS 2017更新到最新版本,因为我似乎无法在此处重现当前的VS 2017(版本15.9.11)的问题……