2011-08-01 10 views
2

모두Intellisense for C++ in VS2010

Intellisense for C++ 프로젝트에 이상한 문제가 있습니다. 배경 : 최근에 VS2010 Sp1을 설치했으며 SQL Server 2008 R2에서 Intellisense가 손실되었습니다. 나는 누적 업데이트 7 (CU7)을 권장대로 설치하려고 시도했지만 이것이 작동하지 않았습니다. 그러나 SQL Server 2008 R2를 다시 설치해도 마찬가지입니다. 그런 다음 SQL Server 2008 R2 용 CU7을 사용하여 업데이트했으며 모두 좋았습니다. 이제는 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가 명령을 인식하면 나타나게됩니다. 아래는 자동으로 작동하지 않는 Intellisense의 이미지입니다. 내가 :: printf와 표준을 입력하면

enter image description here

지금, 인텔리가 나타납니다

enter image description here

는 VS2010/인텔리이 나타나는 때문에이 표준 네임 스페이스를 사용하려면 알릴 수있는 방법이 있습니까 마치 "#using namespace std;"를 인식하지 못하는 것입니다. 명령.

대단히 감사합니다.

+1

미리 컴파일 된 헤더를 비활성화 한 경우'#include "stdafx.h"를 제거 할 수도 있습니다. – Sjoerd

+2

분명히 : "p"를 입력하자마자 intellisense가 나타나기를 원하고 인식 된 토큰이 아니라 (즉, "printf (")까지 도달 한 후에?) 그렇다면 거기서 생각하지 않습니다. 어떤 방법이든 그렇게 할 수 있습니다 - Ctrl + Space는 가까이에 있습니다. –

+0

어디서 읽었는지 기억하지 않지만 VC++ Intellisense는 VS2010의 미리 컴파일 된 헤더로 훨씬 잘 작동합니다. 일부 기능은 미리 컴파일 된 헤더와 만 작동합니다. 왜 VS 2007이 VS 2008에 비해 속도가 느린 지 알기 위해이 코드를 보았습니다. – RedX

답변

2

참고 : 내 두 번째 대답입니다. 코리 넬슨 (Cory Nelson)의 의견을 바탕으로 신용을 주장하지 않습니다.

정확하게 이해하면 'p'를 입력하는 순간 Intellisense가 팝업되기를 원합니다.

대답은 아니요, VS2010은 해당하지 않습니다.

Intellisense는 ":: p"또는 "std :: p"로 시작하지만 일반 "p"는 시작하지 않습니다. 이것은 을 가지고 있지 않습니다.은 미리 컴파일 된 헤더와 관련이 없으며 #include 주문과 관련이 있습니다. 그것은 단지하지 않을 것이다.

내가 과거에 사용 해본 IDE 중 일부는이 경우에 완성을 설정/해제 할 수있는 설정이 있지만 (일부 C++ Builder 버전에서는 그렇게 보았습니다) VS2010에서는 찾을 수 없었습니다.

그렇다면 왜 VS2010에서 허용하지 않습니까? 키워드는 해결할 가치가없는 문제를 유발할 수 있습니다. 그러나 그 이유가 여기에 해당됩니까? 나는 모른다. 어쩌면 VS 팀의 일원이이 점을 밝힐 수 있습니다.

업데이트 : "스트"를 입력하는 동안

#include <string> 
using namespace std; 

int main() 
{ 
    stri 
} 

없음 팝업 :

나는 새로운 VS2010 프로젝트에서이 프로그램을 테스트했다.

"string"은 ctrl-space 다음에 팝업에 나타나며 using namespace std;을 제거하면 없으므로 올바르게 using에 반응합니다.

::을 입력 한 후 Intellisense가 활성화되고 ::s은 SA_AccessType (sourceannotations.h 파일)을 제안하므로 많은 시스템 헤더가있는 목록이 명확하게 미리 채워집니다.

if을 입력하고 강제로 Intellisense를 팝업하면 목록에 if가 없습니다. 그런 다음 if(을 입력하려는 것처럼 (을 입력하면 ifstream(으로 수정됩니다. 따라서 Intellisense가 항상 팝업하면 키워드를 입력하는 것이 훨씬 더 어려울 것입니다.

+0

Brilliant. 매우 감사합니다. 길고 짧다는 것은 너무 많이 요구하지 말고 그걸로 계속 일어나십시오! 다시 한 번 감사드립니다 ... – MoonKnight

2

#include의 목록을 판단하면 printf()이 (가) 선언되지 않았습니다. 결국 이것은 <stdio.h>/<cstdio>으로 선언되었습니다.

그래서 Intellisense는 표시하지 않는 것이 좋습니다. ; <stdio.h>뿐만 아니라 표준 : : 네임 스페이스에 가능한 글로벌 네임 스페이스의 이름을두고 (등)

#include <stdio.h> 가기를 추가하면), 더 using namespace std;이 필요하지 않습니다 이점이있다.

업데이트 : "std :: pri"를 입력 한 후 "std :: printf"가 나타나는 이유는 설명하지 않습니다.

UPDATE2 : 테스트 후, ctrl-space에 의해 강제되었을 때 printf이 제안됩니다. 어쩌면 질문은 왜 인텔리 센스 자동으로 팝업되지 않습니다 무엇입니까?

+1

은 간접적으로 을 포함 할 가능성이 낮습니다. –

+0

C++이므로 을 사용하고 적절한 네임 스페이스를 사용해야합니다. 그가있을 수도 있지만 기능을 직접 사용하기 때문에 여전히 자신을 포함시켜야합니다. – RedX

+0

@RedX - 모두 true입니다. 나는 대답의 "이것은 설명하지 않는다 ..."부분을 목표로하고 있었다. –

1

해당 유형의 C++ intellisense는 Ctrl + Space를 누른 후에 만 ​​나타납니다.

상용 확장자 Visual Assist X은 더 많은 경험을 제공합니다 (Visual Studio의 Express Edition에서는 지원되지 않음).