我正在使用openmodelica,我试图遍历一个数组,以便找到最大值。我能够将代码减少到一个非常简单的测试用例,但仍会出现错误。这是我做错了什么,或者这是openmodelica中的一个错误?这是一个非常简单的案例,它确实给出了错误:
package TestLoop
model ItemA
Real p;
end ItemA;
model ItemB
ItemA a[n];
parameter Integer n = 5;
Real p;
equation
for i in 1:n loop
a[i].p = time;
end for;
algorithm
for i in 1:n loop
p := a[i].p;
end for;
end ItemB;
end TestLoop;
问题出在我的算法部分。这是我得到的错误:
TestLoop.ItemB.c:155:13: warning: implicit declaration of function '$Pa$lB' is invalid in C99 [-Wimplicit-function-declaration]
$Pp = $Pa$lB(modelica_integer)$Pi$rB$Pp;
^
TestLoop.ItemB.c:155:20: error: unexpected type name 'modelica_integer': expected expression
$Pp = $Pa$lB(modelica_integer)$Pi$rB$Pp;
^
1 warning and 1 error generated.
对于为什么会这样,或者我如何解决它的任何建议?如果我用固定值替换赋值,p:= a [1] .p;,代码确实运行(虽然这对我没用)。我最终想在算法部分做的是找到a [n] .p的最大值,其中我有一个方程式部分,可以对项目数组进行有用的计算。
答案 0 :(得分:2)
是的,代码生成是OpenModelica的错误(它不像未知的数组索引)。您的问题很容易在一行中解决(但下列之一):
p = max(r for r in a.p);
p = max(a.p);