Visual Studio 2012 — Intellisense не работает с шаблонами VS2012 Ultimate Stack Overflow

Intellisense очень плохо работает с моим VS …

Когда я пишу код на C ++, он работает на 100% нормально, пока я не начну использовать шаблоны, затем он просто перестанет работать полностью, перестанет обнаруживать ошибки и не завершится автоматически во всех случаях.

Я склонен полагать, что это связано с тем, что я сделал с моим кодом, который сломал его.

Итак, я начал с создания класса со структурой в нем:

template<typename T>
class List<T>
{
private:
struct Node
{
T value;
Node* next;
Node* previous;
};
Node* First;
Node* Last;
...
};

позже я объявляю некоторые дополнительные функции:

template<typename T>
inline T List::First()
{
return First;
}

пока что все хорошо, intellisense работает на 100% нормально, но если я попытаюсь сделать сначала -> это не сработает, VS не скажет дать мне никаких опций (ctrl + space не работает).

Кроме того, если я введу какую-то ерунду, это не скажет мне, что это неправильно:

sdkjgisjdga->vsrsiib = 123jgi;

Я действительно не знаю, что делать, чтобы это исправить.

Спасибо за ваше время и усилия.

PS: я уже пытался сбросить настройки.

РЕДАКТИРОВАТЬ: Забыл сказать, что если я не использую шаблоны в моем файле .h, то Intellisense работает правильно.

7

Решение

Шаблоны должны быть созданы прежде, чем вы сможете окончательно сказать, что они содержат. Например, ваш First-> фрагмент указывает на List<T>::Nodeи это, очевидно, зависит от точного T,

Конечно, Intellisense в этом простом случае может однозначно перечислить членов, просто подставив T==int на мгновение. Но подумайте о том, что хуже: Intellisense не знает участников (как сейчас) или Intellisense неправильно угадывает в трудных случаях, когда вам это нужно больше всего?

8

Другие решения

Я немного опоздал с этим ответом, и, возможно, OP больше не работает над этим кодом, но я думаю, что это все еще может помочь кому-то, кто ищет шаблоны и IntelliSense.

Одна вещь, которую вы можете попробовать — если вы хотите, чтобы ваши опечатки и ошибки отображались при вводе, но если вы хотите, чтобы ваш код мог работать с шаблоном, — это использование # if- # else- # endif:

#if MY_USE_TEMPLATES
template <typename T>
#else
typedef [**your-test-type-here**] T;
#endif
class List {
... your code here ...
}

В Visual Studio 2015 это похоже на работу. Вы можете определить MY_USE_TEMPLATES равным 0 (используя #define), разработать свой код с помощью IntelliSense и выполнить автозаполнение и т. Д. (Чтобы вы допустили меньше ошибок), а затем измените MY_USE_TEMPLATES на 1, когда вы будете готовы к тестированию или компиляции с фактический код шаблона.

Пока у вас включен MY_USE_TEMPLATES, код, который ссылается на ваш список, приведет к ошибке (т. Е. Коду типа «List myList»), и вы можете решить это с помощью дополнительного фиктивного «шаблона» внутри оператора #else. Тем не менее, хорошая вещь, если оставить предложение #else без дополнительного «шаблона»: ошибка, возникающая при обращении к списку, может послужить вам напоминанием о необходимости включить MY_USE_TEMPLATES перед тестированием кода, уменьшая вероятность ошибки. (Опыт подсказывает, что это легко забыть при работе со многими вещами и крупными проектами …)

Однако будьте осторожны при использовании нескольких таких определений типов: typedef … T можно безопасно использовать только один раз для этого имени «T»; в то время как вы можете использовать ‘typedef … TYPE1’ для одного класса и ‘typedef … TYPE2’ для другого, вы не могу безопасно используйте одно и то же имя типа для разных типов, если вы не поместите разные имена типов в отдельные пространства имен. (Я попробовал это в Visual Studio 2015.)

6

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector