exponenta event banner

Ошибка разрешения: генератору кода не удалось создать деструктор C++ для класса MATLAB

Проблема

Создание исходного кода с классами C++ из кода MATLAB ® увеличивает вероятность переполнения стека во время выполнения кода. Создание кода может прекратиться и создать следующее сообщение:

Code generator failed to produce C++ destructor for MATLAB class 'y'. Generated code is not exception-safe. To enable generation of C++ destructor, disable 'Generate Re-entrant code (MultiInstanceCode)' configuration parameter.

Это сообщение может появиться, если выполняются оба условия:

  • Можно создать код C++ с классами из кода MATLAB путем установки TargetLang комуC++«и» CppPreserveClasses кому true в объекте конфигурации (coder.CodeConfig или coder.EmbeddedCodeConfig) или в параметрах построения проекта, установив для параметра «Язык» значение C++и установите флажок Генерировать классы C++ из классов MATLAB.

  • Вы можете создать код для повторного ввода, включив MultiInstanceCode параметр в объекте конфигурации кода или путем включения параметра Генерировать код повторного входа на вкладке Память приложения MATLAB Coder™.

  • Деструктор класса в коде MATLAB имеет постоянную переменную или вызывает другую функцию, которая объявляет и использует постоянную переменную.

Возможные решения

В зависимости от типа кода, который требуется создать, попробуйте одно из этих решений.

Поднять предел стека

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

  • В диалоговом окне параметров проекта на вкладке «Память» установите параметр «Максимальное использование стека».

  • В объекте конфигурации для создания автономного кода (coder.CodeConfig или coder.EmbeddedCodeConfig), установите StackUsageMax параметр.

Увеличьте предел стека, удвоив значение стека до успешного создания кода. Тогда генератор кода может иметь достаточный объем памяти для генерации классов C++ во входящем коде.

Примечание

Максимальное настраиваемое ограничение стека зависит от компоновщика в системе. Размер стека по умолчанию зависит от конфигурации операционной системы и системы.

Деструктор класса в коде MATLAB не должен иметь постоянной переменной или вызывать другую функцию, которая объявляет постоянную переменную.

Отключить повторный ввод кода

Для создания кода, содержащего классы C++ для классов MATLAB, можно отключить генерацию исходного кода. Выполните одно из следующих действий:

  • В объекте конфигурации кода отключите MultiInstanceCode параметр.

  • В приложении Кодер MATLAB отключите параметр Генерировать код повторного входа.

Создание структур вместо классов

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

  • В объекте конфигурации для создания автономного кода (coder.CodeConfig или coder.EmbeddedCodeConfig), комплект TargetLang комуC++«и» CppPreserveClasses кому false.

  • В приложении Кодер MATLAB установите для параметра Язык значение C++. В параметрах построения проекта снимите флажок Генерировать классы C++ из классов MATLAB.

Связанные темы