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