Вы видите это сообщение об ошибке:
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