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