Следующая проблема накладывает один из моих проектов на долгое время:
Некоторые определения функций (из .cpp файлов) исключаются/скрыты от intellisense!
Невозможно " Перейти к определению" для этих функций, а также не указано в панели навигации.
Однако функции отображаются в списке автозаполнения. Проблема только в файлах .cpp, файлы .h отлично разбираются. "Готовая декларация" тоже работает.
Это то же самое с 2005 года, с каждой новой версией, я надеялся на исправление, но, похоже, это не признается как ошибка кого-либо еще.
UPDATE: Я проследил это следующим образом: все функции, содержащие определенный макрос, не распознаются intellisense. Первоначальный макрос был
#define forlist(x,list) for( auto x= list.begin(); x.valid(); ++x)
но вы также можете использовать упрощенный тестовый пример
#define fortest(x) for( auto x= 1; x< 2; ++x)
void myclass::TestFN()
{
fortest( g )
{
g;
}
}
Следующим шагом будет поиск обходного пути (или попытка просмотреть отчет об ошибках в micrsoft).
Пожалуйста, не слишком много говоришь об этом макросе. Это существующий код реализации списка, который я не могу изменить. Я мог бы просто НЕ использовать макрос, но я все еще думаю, что это ошибка VS.
Самое смешное, что следующий (действительно *** ic macro) прекрасно работает:
#define fortest(x) for( auto x= 1; x< 2; ++x) {
void myclass::TestFN()
{
fortest( g )
g;
}
}
Может ли быть, что intellisense рассматривает случай 1 как нелегальное определение локальной функции? (см. http://connect.microsoft.com/VisualStudio/feedback/details/781121/c-intellisense-mistakes-loop-expression-for-function-definition)
Следующая работа отлично тоже
#define fortest(x) for( auto x= 1; x< 2; ++x)
void myclass::TestFN()
{
fortest( g )
g;
}