Ассоциативный массив CAPL со строковыми типами

Следуя этой статье, я пытаюсь создать такой ассоциативный массив:

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

Это точно такой же пример в статье. Проблема возникает, когда я пытаюсь поместить значения в этот ассоциативный массив. Например:

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

Это дает мне ошибку компиляции: «Ошибка 1112 в (89,23): типы операндов несовместимы»

Что я делаю не так?

ВЕРСИИ: я использую Векторный браузер CAPL, включенный в CANalyzer версии 11.0 SP2.


person framontb    schedule 06.11.2018    source источник


Ответы (1)


С ассоциативными полями (так называемыми картами) вы можете выполнять присвоение значений 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]);
}
person biTz    schedule 17.03.2019
comment
В браузере Vector CAPL версии 11.0.55.0 компиляция выдает ошибку синтаксического анализа. - person framontb; 20.03.2019
comment
Вы можете инициализировать массив char только один раз, когда он объявлен, и инициализация - единственное обстоятельство, при котором вы можете заполнить массив. Не путайте инициализацию с присвоением. В текущем контексте связь между строками может быть выполнена, как указано в примере: strncpy (namen [Vector], Informatik, 30); - person biTz; 24.04.2019