Opened 14 years ago
Closed 13 years ago
#1707 closed defect (fixed)
type mismatch
| Reported by: | mohamed | Owned by: | Martin Sjölund |
|---|---|---|---|
| Priority: | blocker | Milestone: | 1.9.0 |
| Component: | Frontend | Version: | |
| Keywords: | Cc: | mohamed |
Description (last modified by )
Have you any idea how can I solve this problem,
model tableau
String tab[8];
equation
tab=getVariableNameTable(2,8);
end tableau;
function getVariableNameTable
extends modelInExpressionBase;
public
input Integer indexModel ;
input Integer dim;
output String variableNameTable[dim] ;
algorithm
if indexModel == 1 then // model1
variableNameTable[1:size(model2,1)] := model1[:];
elseif indexModel == 2 then // model2
variableNameTable [1:size(model2,1)]:= model2[:];
end if;
end getVariableNameTable;
record modelInExpressionBase
public
final constant String model1[8] = {"a", "b", "c", "d", "e", "f", "g","h"};
final constant String model2[8] = {"a", "b", "c", "d", "e", "f", "g", "i"};
end modelInExpressionBase;
Error: Type mismatch in assignment in variableNameTable[{1,2,3,4,5,6,7,8}] := {\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\"} of String[dim] := String[8]
Error:
Error occurred while flattening model tableau
Thank you in advance,
Best regards,
Change History (6)
comment:2 by , 14 years ago
Using the function I posted below now works properly (r11265). It type-checks and compiles fine.
comment:3 by , 13 years ago
| Cc: | mohamed, → mohamed |
|---|---|
| Component: | → Backend |
| Description: | modified (diff) |
| Milestone: | → 1.9.0 |
comment:4 by , 13 years ago
| Component: | Backend → Frontend |
|---|
comment:5 by , 13 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
The initial code now works in r12755. Regression testing in SpliceUnknownDest.mo.
comment:6 by , 13 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
Note:
See TracTickets
for help on using tickets.

Note that a function may not extend from a record (see 7.1.3 in https://modelica.org/documents/ModelicaSpec32Revision1.pdf), and that the constants have to be protected.
function getVariableNameTable extends modelInExpressionBase; public input Integer indexModel ; input Integer dim; output String variableNameTable[dim] ; algorithm for i in 1:dim loop variableNameTable[i] := if indexModel == 1 then model1[i] else model2[i]; end for; end getVariableNameTable;Does work (except code generation needs to be fixed)