全部,
我对Intellisense for C ++项目有一个奇怪的问题。背景:我最近安装了VS2010 Sp1,并且在SQL Server 2008 R2中丢失了Intellisense。我按照建议尝试安装累积更新7(CU7),但这不起作用。但是,重新安装SQL Server 2008 R2。然后我使用CU7更新了SQL Server 2008 R2并且一切都很好。现在,Intellisense适用于C#项目,但现在对于C ++项目来说它并没有完全正常工作(注意:C ++项目不 C ++ / CLI)。
我已禁用预编译标题(“未使用预编译标题”)并具有以下内容:
#include <cmath>
#include <complex>
#include <iostream>
#include "stdafx.h"
#include "globals.h"
using namespace std;
注意:我知道使用std命名空间并不总是被认为是最佳实践,但在这里它将节省我很多时间,并且没有模棱两可的可能性。
所以现在当我想要一个printf语句时,如果我输入printf,我得到的不是Intellisense提示符。但是,如果我按Ctrl + Space或Ctrl + J Intellisense识别该命令,它就会显示出来。以下是智能感知不能自动工作的图像。
现在,如果输入std :: printf,则显示Intellisense:
有没有办法让VS2010 / Intellisense知道我想使用std命名空间,因为它似乎只是没有识别“#using namespace std;”命令。
非常感谢。
答案 0 :(得分:2)
根据您的#include
列表判断,printf()
尚未宣布。毕竟,它已在<stdio.h>
/ <cstdio>
中声明。
所以Intellisense是不对的。 ;)
在顶部添加#include <stdio.h>
的优点是不需要using namespace std;
,因为<stdio.h>
将名称放在全局名称空间中(也可能在std ::名称空间中) )。
UPDATE :这并不能解释为什么在输入“std :: pri”后会出现“std :: printf”。
UPDATE2 :经过测试,很明显当ctrl-space强制建议printf
。也许问题是为什么Intellisense不会自动弹出?
答案 1 :(得分:2)
注意:我的第二个答案。基于Cory Nelson的评论,所以我不会要求信用。
如果我理解正确,您希望在输入“p”时弹出Intellisense。
答案是:不,VS2010不会这样做。
Intellisense将为“:: p”或“std :: p”启动,但不会为普通的“p”启动。这与预编译的标头有无,也没有#include
顺序。它不会。
我过去使用的一些IDE在这种情况下有一个启用/禁用完成的设置(我记得在某些C ++ Builder版本中看到过),但我在VS2010中找不到它。
那么为什么VS2010不允许呢?关键字可能导致不值得解决的问题,但这是否是原因?我不知道。也许VS团队的成员可以对此有所了解。
<强>更新强>
我在一个新的VS2010项目中测试了这个程序:
#include <string>
using namespace std;
int main()
{
stri
}
输入“stri”时没有弹出窗口。
“string”出现在ctrl-space之后的弹出窗口中,当我删除using namespace std;
时它不存在,因此它正确地对using
作出反应。
输入::
后,Intellisense激活并在::s
建议SA_AccessType后(来自文件sourceannotations.h),因此列表显然预先填充了许多系统标题。
如果我输入if
并强制弹出Intellisense,则列表中没有if
。如果我然后输入(
,就好像我想要输入if(
一样,它会更正为ifstream(
。因此,如果Intellisense总是弹出,那么键入关键字会更加困难。
答案 2 :(得分:1)
只有在按下ctrl + space后才会出现这种类型的C ++ intellisense。
商业扩展程序Visual Assist X提供的体验可能更符合您的需求(请注意,Visual Studio的快速版本不支持它。)