2011-08-01 34 views
2

全部,VS2010中用於C++的Intellisense

我對用於C++項目的Intellisense有個奇怪的問題。背景:我最近安裝了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的圖像不能自動工作。

enter image description here

現在,如果我輸入的std :: printf的,智能感知顯示:

enter image description here

有沒有什麼辦法讓VS2010 /智能感知知道我想使用std命名空間,因爲它出現就像它只是沒有認識到「#using namespace std;」命令。

非常感謝。

+1

如果你禁用了預編譯頭文件,那麼你可以刪除'#include「stdafx.h」'。 – Sjoerd

+2

要清楚:只要你開始輸入「p」而不是在某個可識別的標記處(即在達到「printf(」)之後就想要智能感知彈出)如果是這樣,我不認爲是否有任何方法可以這樣做 - ctrl + space就像你會得到的那樣接近 –

+0

不記得我在哪裏閱讀它,但是VC++ Intellisense在VS2010中使用預編譯頭文件的效果更好,甚至有一些邊界情況,有些功能只適用於預編譯頭文件,當我試圖找出爲什麼我的VS 2010與VS 2008相比如此之慢時,我看到了這一點。爲什麼你禁用了pch? – RedX

回答

2

注意:我的第二個答案。根據Cory Nelson的評論,所以我不聲稱信用。

如果我理解正確的話,你希望那智能感知彈出輸入「P」的時刻。

答案是:不,VS2010不會那樣做

智能感知將啓動「:: p」或「std :: p」,但不是一個普通的「p」。這有什麼也沒有做預編譯頭,也沒有#include命令。它不會。

我曾經使用的一些IDE有一個設置來啓用/禁用在這種情況下的完成(我記得在一些C++ Builder版本中看到這樣),但我在VS2010中找不到它。

那麼爲什麼VS2010不會允許它呢?關鍵詞可能會導致不值得解決的問題,但這是否是原因?我不知道。也許VS小組的成員可以對此有所瞭解。

更新:

我測試這個程序在一個新的VS2010項目:

#include <string> 
using namespace std; 

int main() 
{ 
    stri 
} 

沒有彈出,而輸入 「STRI」。

「ctrl-space」後面的彈出窗口中出現「string」,當我刪除using namespace std;時它不存在,因此它對using做出了正確的反應。

在鍵入::之後,智能感知激活,並在::s建議SA_AccessType(來自文件sourceannotations.h)之後,因此該列表顯然預填了許多系統標題。

如果我鍵入if並強制智能感知彈出,則列表中沒有if。如果我然後輸入(就好像我想輸入if(,則更正爲ifstream(。因此,如果Intellisense總是彈出,那麼鍵入關鍵字會更困難。

+0

輝煌。非常感謝。長而短的是,停止要求太多並繼續下去!再次感謝... – MoonKnight

2

看你的#include名單上,printf()尚未聲明。畢竟,它在<stdio.h>/<cstdio>中聲明。

所以智能感知是正確的不顯示它。 ;)

向頂部添加#include <stdio.h>的優點是不需要using namespace std;,因爲<stdio.h>將名稱放入全局名稱空間(也可能位於std :: namespace中)。

UPDATE:這並不能解釋爲什麼打字 「的std :: PRI」 之後 「的std :: printf」 上顯示出來。

UPDATE2:經過測試,很顯然printf會被ctrl-space強制推薦。也許問題是爲什麼Intellisense不會自動彈出

+1

間接包括並非不可能。 –

+0

這是C++,所以他應該使用並使用適當的名稱空間。 @Bo它可能是,但由於他直接使用該函數,他應該自己也包含它。 – RedX

+0

@RedX - 全部都是如此。我的目標是「這不能解釋......」答案的一部分。 –

1

該類型的C++ intellisense僅在您按下ctrl +空格後出現。

商業擴展Visual Assist X給出了一種體驗,可能更符合您的需求(請注意,它在Visual Studio的快速版中不受支持)。

相關問題