Недавно я хотел внести вклад в проект C++ с открытым исходным кодом. Только имея небольшой опыт работы с C++, я выбрал Visual Studio как IDE, обновленную с пакетом обновления 1. Я получил решение для создания относительно легко и хотел немного ориентироваться в коде, чтобы получить обзор.«Перейти к определению»/«Перейти к декларации» не работает надежно в VS2010?
Это когда я заметил, что иногда «Перейти к определению»/«Перейти к декларации» не работает. Оба варианта доступны, когда я нажимаю правой кнопкой мыши на символ в исходном коде, но когда я вхожу в заголовочный файл, «Перейти к определению» возвращает меня снова в декларацию для тех функций, которые касаются. И когда я в файле .cc, я всегда получаю определение в том же файле.
еще несколько вещей, которые я заметил о функциях, которые обеспокоенное этого является:
1) для некоторых функций, можно перейти к определению из заголовка файла, но в другом направлении нарушается
2) Навигация для некоторых функций может быть исправлен, если декларация изменена, чтобы полностью соответствовать определению, например
header declaration:
void buche(sint64 betrag, player_cost type);
source definition:
void karte_t::buche(sint64 const betrag, player_cost const type)
изменения
header declaration:
void buche(sint64 const betrag, player_cost const type);
-> навигация работает в обоих направлениях
3) при нажатии кнопки в блок коды заинтересованной функции в исходном файле, в меню области видимости в верхнем изменения в «(Глобальный масштаб)» вместо того, чтобы показывать маленькую стрелку вправо (что является символом для прямого объявления, которое я думаю?) и имя класса (но эти функции, безусловно, являются членами класса)
Я много искал, и это кажется довольно известной проблемой. На сайте есть тема: How to get IntelliSense to reliably work in Visual Studio 2008
Я также нашел несколько тем на форумах Microsoft (которые я не могу связать, поскольку мне разрешено публиковать две гиперссылки), но официального подтверждения ошибки или чего-то еще ,
Квинтэссенция ответов, которые я нашел, заключается в том, что следует удалить файл .ncb (который был заменен .sdf-базой данных в VS2010, насколько я понял), или использовать параметр для восстановления базы данных при загрузке решения , Я делал все это несколько раз, но безрезультатно. Самый высокий рейтинг ответа на поток здесь, на Stackoverflow, кажется, подразумевает, что это просто ошибка (из Intellisense - правильно ли я понял, что это компонент автозаполнения, который также отвечает за навигацию кода?), Нужно принять, предлагая вместо этого используйте Visual Assist, однако вопрос был о VS2008, и один ответ указал на улучшение VS2010. Другой ответ обвинил рекурсивные ссылки, но я-думаю - это не проблема в этом проекте, поскольку все файлы (конечно, те немногие, с которыми я проверил и столкнулись с проблемами), включают в себя охранники. Мне также подтвердил один кодер этого проекта, что у него такие же проблемы. Но я не очень заинтересован в том, чтобы тратить деньги на Visual Assist, это всего лишь маленькое хобби ...
Имея большой опыт работы с Eclipse/Java, мне кажется странным, что такой относительно важный функция IDE не работает надежно. Конечно, я могу понять, что статический анализ кода для C++ намного сложнее, чем для Java. Но опять же, Visual Studio - это коммерческий продукт, в котором много циклов разработки.
Итак, чтобы суммировать это сообщение, неужели это неизбежная ошибка?
Статья, которую вы опубликовали: Как получить intellisense для надежной работы в VS 2008, работал для меня. Я закрыл решение VS, удалил SDF-файл решения, повторно открыл решение, перестроил решение и вуаля. – John