具有字符串类型的 CAPL 关联数组

CAPL associative array with string types

在此 paper 之后,我尝试创建一个这样的关联数组:

variables
{
  char[30] translate[ char[] ];
} 

和论文中的例子一模一样。当我尝试将值放入这个关联数组时,问题就来了。例如:

on preStart
{
  translate["hello"] = "hola";
}

这给了我一个编译错误:"Error 1112 at (89,23): operand types are incompatible"

我做错了什么?

版本:我正在使用 Vector CAPL 浏览器 包含在 CANalyzer 版本 11.0 SP2

使用关联字段(所谓的映射),您可以 1:1 将值分配给其他值,而无需使用过多的内存。关联字段的元素是键值对,因此可以通过键快速访问值。

关联字段的声明方式与普通字段类似,但键的数据类型写在方括号中:

int m[float];         // maps floats to ints
float x[int64];       // maps int64s to floats
char[30] s[ char[] ]  // maps strings (of unspecified length) to strings of length < 30

如果指定键类型char[],则所有字符字段(任意大小)都可以用作键值。在迭代中,循环变量也必须声明为 char[]。关键比较,例如为了确定迭代顺序,然后作为字符串比较执行,因此不使用特定于国家/地区的算法。

char[] 是唯一可以用作键类型的字段类型。请记住,您不能声明 char[] 类型的变量或参数,迭代中的循环变量除外。

字符串之间的关联:

char[30] namen[char []];
strncpy(namen["Max"], "Mustermann", 30); 
strncpy(namen["Vector"], "Informatik", 30);

for (char[] mykey : namen)
{
  write("%s is mapped to %s", mykey, namen[mykey]);
}