• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Вопрос по интерфейсу (работа Intellisence) и пару сопутствующих...

  • Автор темы alexroot
  • Дата начала
A

alexroot

Установил Visual Studio

(более подробно
Microsoft Visual Studio 2008
Visual Studio Team System 2008
Version 9.0.21022.8 RTM
).

До этого стояла Microsoft Visual Studio .NET 2003.

Собственно проблемма (извините заранее за некоторые оплошности в терминологии):

В Visual Studio есть так называемая система Intellisense
которая в частности помагает работать с объектами.
Например поставив точку после названия объекта получаем список доступных методов и членов объекта
(появляется вспомагательное окно-список, из которого сразу можно выбрать необходимый метод или член
дабы не копаться по файлам в поиске их точного названия).
Это очень удобно, и проблемма возникла именно в том,
что Intellisense в моем случае почемуто не работает в свежеустановленной Microsoft Visual Studio 2008.
Вернее она наверное работает, но почемуто хуже чем в Microsoft Visual Studio .NET 2003.

Описываю более точно условия возникшей проблеммы.

Имеем шесть файлов (приложение - консольное):
1. main.cpp - файл с функцией main ()
2. main.h
3. model.cpp - файл с некоторыми функциями работы над данными
4. model.h
5. data.cpp файл с описанием классов - контейнеров хранения данных
6. data.h

Файлы data.cpp и data.h используются и в файле model.h и в файле main.h,
т.к. в качестве аргументов функций классов, используемых в model.h и в файле main.h,
являются классы-контейнеры описанные в data.h и data.cpp.
Таким образом, при компиляции проекта будут ошибки переобъявления классов и функций,
которые находятся в data.h и data.cpp, т.к. в файлах main.h и model.cpp
есть строка

Код:
#include "data.h"

Почитав литературу, обнаружил прекрасный выход из этой ситуации:
в файлах main.h и model.h пишем такой код

Код:
#ifndef DATA
#define DATA
#include "data.h"
#endif

и никаких проблемм с Intellisense в предыдущей версии Microsoft Visual Studio .NET 2003 небыло.
А вот в 2008м - есть проблемма, Intellisense категорически отказывается работать.
Хелп я читал, файл .ncb грохал, пересобирал - ничего не помагает.

Конечно, если работать только с одним файлом, тоесть компилировать только model.cpp
и в нем закоментировать строки

Код:
//#ifndef DATA
//#define DATA
#include "data.h"
//#endif

то Intellisense для этого файла работает. Но это ненужная трата времени, тем более в 2003-м все почемуто работает.

Очень прошу пояснить как выйти из подобной ситуации чтобы постоянно не закоментировать
указанные строки для работы с отдельными файлами и не раскоментировать их при необходимости
компиляции всего проекта.


з.ы. Кроме того обнаружил такой глюк нехороший,
при нажатии на на иконку "Find in files" - вижуал студио вылетает.

С уважением, Александр.
 
Y

Yason

К сожалению, по сути вопроса сказать могу немного, но логичнее было бы вписать защиту от многокатного инклуда в сам .h файл (так по умолчанию делает BCB):
Код:
(файл data.h)
#ifndef DATA
#define DATA
//
// ...Содержимое data.h...
//
#endif

(файлы, использующие data.h)
#include "data.h"
 
A

alexroot

Yason

Вы подсказали решение, которое полностью удовлетворило VS и решило проблему.

Спасибо что вникли в проблему и дали решение. Очень благодарен!
Сам я не додумался :(

На данный момент пробовал свой предыдущий проект в VS 2003 - Intellisense работает.
К сожалению в VS 2008 - не работает.

С Вашим вариантом избежания многократного инклуда - Intellisense заработал и в 2008м VS.


С уважением, Александр.

з.ы. к сожалению репутацию изменить не могу в виду малого количества моих сообщений.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!