Intellisense для C ++ в VS2010 - PullRequest
       45

Intellisense для C ++ в VS2010

2 голосов
/ 01 августа 2011

Все,

У меня странная проблема с проектами Intellisense для C ++. Предыстория: я недавно установил VS2010 Sp1 и потерял Intellisense с SQL Server 2008 R2. Я попытался установить Накопительное обновление 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 распознает команду, и она появляется. Ниже изображение Intellisense не работает автоматически.

enter image description here

Теперь, если я наберу std :: printf, появится Intellisense:

enter image description here

Есть ли способ сообщить VS2010 / Intellisense, что я хочу использовать пространство имен std, потому что кажется, что оно просто не распознает "#using namespace std;" команда.

Большое спасибо.

Ответы [ 3 ]

2 голосов
/ 01 августа 2011

Примечание: мой второй ответ. На основании комментария Кори Нельсона, поэтому я не претендую на кредит.

Если я вас правильно понимаю, вы хотите, чтобы Intellisense всплывал, как только вы наберете 'p'.

Ответ: Нет, VS2010 этого не сделает .

Intellisense включается для ":: p" или "std :: p", но не для простого "p". не имеет ничего общего с предварительно скомпилированными заголовками и не имеет порядка #include. Это просто не будет.

В некоторых IDE, с которыми я работал в прошлом, есть настройка для включения / отключения завершения в этом случае (я помню, что видел это в некоторых версиях C ++ Builder), но я не смог найти его в VS2010.

Так почему же VS2010 этого не допустит? Ключевые слова могут вызвать проблемы, которые не стоит решать, но в этом ли причина? Я не знаю. Может быть, член команды VS мог бы пролить свет на это.

Обновление:

Я тестировал эту программу в новом проекте VS2010:

#include <string>
using namespace std;

int main()
{
    stri
}

Нет всплывающих окон при наборе "stri".

"строка" появляется во всплывающем окне после Ctrl-пробела и отсутствует, когда я удаляю using namespace std;, поэтому она правильно реагирует на using.

После ввода :: Intellisense активируется, а после ::s предлагает SA_AccessType (из файла sourceannotations.h), поэтому список явно заполняется многими системными заголовками.

Если я наберу if и заставлю всплывающее окно Intellisense, в списке нет if. Если я затем наберу (, как если бы я хотел набрать if(, он исправляется до ifstream(. Так что, если Intellisense будет всегда всплывать, было бы гораздо сложнее набирать ключевые слова.

2 голосов
/ 01 августа 2011

Судя по вашему списку #include, printf() не был объявлен. В конце концов, это объявлено в <stdio.h> / <cstdio>.

Так что Intellisense правильно не показывать. ;)

Добавление #include <stdio.h> к вершине имеет то преимущество, что using namespace std; не требуется, поскольку <stdio.h> помещает имена в глобальное пространство имен (и, возможно, также в пространство имен std :: name).

ОБНОВЛЕНИЕ : Это не объясняет, почему "std :: printf" появляется после ввода "std :: pri".

ОБНОВЛЕНИЕ2 : После тестирования становится ясно, что printf будет предложено при форсировании ctrl-space. Может быть, вопрос в том, почему Intellisense не автоматически не всплывает?

1 голос
/ 24 сентября 2011

Этот тип C ++ intellisense появляется только после того, как вы нажмете Ctrl + Пробел.

Коммерческое расширение Visual Assist X дает опыт, который может быть больше, чем вы ищете (обратите внимание, чтоэто не поддерживается в экспресс-выпусках Visual Studio).

...