Появится следующее сообщение об ошибке:
Output of 'coder.ceval' has unknown type. The enclosing expression cannot be evaluated. Specify the output type by assigning the output of 'coder.ceval' to a variable with a known type.
Это сообщение об ошибке появляется, когда генератор кода не может определить тип выхода coder.ceval звоните.
Инициализируйте временную переменную с ожидаемым типом вывода. Назначение выходных данных coder.ceval к этой переменной.
Предположим, что у вас есть функция C, называемая cFunctionThatReturnsDouble. Требуется создать код библиотеки C для функции foo. Генератор кода возвращает сообщение об ошибке, поскольку не может определить возвращаемый тип coder.ceval.
function foo %#codegen callFunction(coder.ceval('cFunctionThatReturnsDouble')); end function callFunction(~) end
Чтобы исправить ошибку, определите тип вывода функции C с помощью временной переменной.
function foo %#codegen temp = 0; temp = coder.ceval('cFunctionThatReturnsDouble'); callFunction(temp); end function callFunction(~) end
Также можно использовать coder.opaque для инициализации временной переменной.
Предположим, что у вас есть класс с пользовательским set способ. Этот класс использует set чтобы значение свойства объекта находилось в определенном диапазоне.
classdef classWithSetter properties expectedResult = [] end properties(Constant) scalingFactor = 0.001 end methods function obj = set.expectedResult(obj,erIn) if erIn >= 0 && erIn <= 100 erIn = erIn.*obj.scalingFactor; obj.expectedResult = erIn; else obj.expectedResult = NaN; end end end end
При создании кода библиотеки C для функции fooгенератор кода выдает сообщение об ошибке. Тип ввода в set метод не может быть определен.
function foo %#codegen obj = classWithSetter; obj.expectedResult = coder.ceval('cFunctionThatReturnsDouble'); end
Чтобы устранить ошибку, инициализируйте временную переменную известного типа. В этом примере используется тип скалярного двойника.
function foo %#codegen obj = classWithSetter; temp = 0; temp = coder.ceval('cFunctionThatReturnsDouble'); obj.expectedResult = temp; end