2014-03-27 408 views
2

与直接初始化语法没有智能感知当我键入在Visual Studio 2013

Widget w = Widget(

智能感知自动给出一个弹出,我可以通过可用的构造函数导航。在哪里,如果我键入

Widget w(

我没有得到任何这样的弹出窗口。快捷方式(Ctrl + Shift + Space)也不会带来它。我尝试重置我的设置,但没有帮助。任何人都知道这种行为是有意的还是可以修复的?

+0

假设这是不是模棱两可的语句,但智能感知失败的问题。尝试执行_Project_ - > _Rescan Solution_,如果这样做不起作用,则删除' .sdf'文件,以便在下次打开解决方案时重建它(可能需要一段时间)。也就是说,智能感知有时会迷失方向,并拒绝适合大型项目,特别是如果他们使用复杂模板巫术等。 – user2802841

回答

1

Widget w(...可能是不同的东西开始。例如定义了一个名为w的对象(这似乎是你想要的),而且还声明了一个名为w的函数声明,返回Widget。这可能是智能感知拒绝工作的原因。

对于C++ 11(这是由VS2013 IIRC支持),您可以尝试统一初始化,以及:

Widget w{... 

,甚至新的“汽车”风格的香草萨特建议及其他:

auto w = Widget{... 
+0

是不是'自动W = Widget {...}'与'Widget w = Widget(...)'一样,还是我错过了什么? – OMGtechy

+0

它是相同的'部件w =小部件{...}',并且是相同的'部件w =小工具(...)',除非在'Widget'可用一个'initializer_list'构造函数。 Widget w(...)大部分与Widget w = Widget(...)相同(或者后者使用'auto'和/或两者都使用'{}'),除非移动和/或Widget'的'拷贝构造函数是不可访问。该构造函数应该是可访问,但通常不会在副本初始化被调用。 –

+0

当然了。而关于新样式伟大的建议,这是绝对的做就行了。 – user2223730