Поделиться через


Работа с кодом Visual C++ в конструкторе классов

Обновлен: Ноябрь 2007

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

В более ранних версиях Visual Studio конструктор классов поддерживал только управляемые языки (Visual C# и Visual Basic). В Visual Studio 2008 добавлена ограниченная поддержка исходного кода C++, который может использоваться только для визуализации и документирования.

Конструктор классов поддерживает следующие элементы кода C++:

  • Класс (походит на фигуру управляемого класса, но при этом может иметь множественные отношения наследования)

  • Анонимный класс (отображает имя, созданное окном классов для анонимного типа)

  • Класс-шаблон

  • Структура

  • Перечисление

  • Макрос (отображает представление макроса после обработки)

  • Определение типа

Устранение неполадок, связанных с разрешением типа и отображением

Расположение исходных файлов

Конструктор классов не отслеживает размещение исходных файлов. Поэтому при изменении структуры проекта или перемещении исходных файлов в проекте конструктор классов может потерять путь типа (особенно если исходный тип является типом typedef, базовым классом или связанным типом). При этом может возникнуть ошибка, например Конструктор классов не может отобразить этот тип. Для предотвращения возникновения ошибки перетащите измененный или перемещенный исходный код в схему классов и отобразите его повторно.

Проблемы обновления и производительности

Для проектов Visual C++ время отображения в схеме классов изменений в исходном файле может занимать от 30 до 60 секунд. Такая задержка может вызвать возникновение ошибки В выбранном блоке не найдены типы. При возникновении подобной ошибки в окне сообщения об ошибке нажмите кнопку Отмена и дождитесь появления элементов кода в "Окне классов". После этого конструктор классов должен отобразить тип.

Если схеме классов не удается обновить изменения в коде, необходимо закрыть схему и открыть ее снова.

Проблемы разрешения типа

Конструктор классов не может разрешить типы по следующим причинам:

  • Тип находится в проекте или сборке, на которую нет ссылки из проекта, содержащего схему классов. Для исправления этой ошибки добавьте ссылку в проект или сборку, содержащую тип. Дополнительные сведения см. в разделе Практическое руководство. Добавление или удаление ссылок в Visual Studio (Visual Basic).

  • Тип не находится в области действия, и конструктор классов не может его обнаружить. Убедитесь, что код присутствует в операторах using, imports или #include. Также убедитесь, что тип (или связанный тип) не перемещен за пределы пространства имен, в котором он находился первоначально. Дополнительные сведения см. в разделе Создание ссылок на пространства имен и компоненты.

  • Тип не существует (или закомментирован). Для исправления этой ошибки убедитесь, что тип случайно не закомментирован и не удален.

Наиболее распространенной ошибкой разрешения типа является ошибка Код не найден для одной или нескольких фигур на схеме классов ''<элемент>''. Дополнительные сведения см. в описании ошибки.

Устранение неполадок при получении конкретных сообщений об ошибках

Дополнительные сведения об устранении неполадок при получении конкретных сообщений об ошибках см. в разделах Сообщения об ошибках конструктора классов.

Ограничения для элементов кода C++

  • После загрузки проекта Visual C++ конструктор классов работает в режиме "только для чтения". Разработчик может изменить схему классов, но не сможет сохранить изменения из схемы классов обратно в исходный код.

  • Конструктор классов поддерживает только исходную семантику C++. Для скомпилированных в управляемый код проектов Visual C++ конструктор классов будет только отображать элементы кода, которые являются собственными типами. Поэтому при добавлении схемы классов в проект конструктор классов не позволяет визуализировать элементы, для которых свойство IsManaged имеет значение true (т. е. типы значений и ссылочные типы).

  • Для проектов Visual C++ конструктор классов считывает только определение типа. Например, представьте, что тип определен в файле заголовка (H-файл), а также определены его члены в файле реализации (CPP-файл). При вызове команды "Показать схему классов" в файле реализации конструктор класса ничего не отобразит. Другим примером является вызов команды "Показать схему классов" в CPP-файле, который использует оператор #include для включения других файлов, но не содержит действующих определений классов. И в этом случае конструктор классов ничего не отобразит.

  • IDL-файлы, которые определяют интерфейсы COM и библиотеки типов, не отображаются в схемах до тех пор, пока не будут скомпилированы в исходном коде C++.

  • Конструктор классов не поддерживает глобальные функции и переменные.

  • Конструктор классов не поддерживает объединения. Это специальный тип класса, в котором память выделяется только по мере необходимости для объединения больших данных-членов.

  • Конструктор класса не отображает базовые типы данных, такие как int и char.

  • Конструктор классов не отображает типы, которые определены за пределами текущего проекта, если проект не содержит корректных ссылок на эти типы.

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

  • Конструктор классов не может отобразить типы, которые являются типами "void" или производными от типа "void".

См. также

Основные понятия

Классы Visual C++ в конструкторе классов

Структуры Visual C++ в конструкторе классов

Перечисления Visual C++ в конструкторе классов

Операторы typedef языка Visual C++ в конструкторе классов

Другие ресурсы

Разработка и просмотр классов и типов

Работа с классами и другими типами

Работа со схемами классов

Разработка классов и типов

Сообщения об ошибках конструктора классов