Стартовая страница › Форумы › Ошибки в работе › Ошибки Сервера › Ошибка при компиляции «Cannot use local variable»
- В этой теме 11 ответов, 3 участника, последнее обновление 1 месяц, 1 неделя назад сделано
manjey73.
-
АвторСообщения
-
23.10.2025 в 17:06 #40852
vg
УчастникЗдравствуйте!
Воспользовался конвертером проекта из 5-й версии в 6-ю. Теперь пытаюсь перенести формулы: вручную скопировал из xml 5-й версии в редактор скриптом в 6-й версии (через ScadaAdmin). По всем формулам лезет ошибка при компиляции «error CS8801: Cannot use local variable or local function ‘GetMin’ declared in a top-level statement in this context.»
В движке, если открыть через visual studio, никаких ошибок не подчёркивает. Понимаю, что движок это лишь часть системы и к этому классу потом, вероятно, идёт обращение из служб и они похоже не видят из контекста, но не приложу ума почему такая ошибка появилась?
P.S.
Все скрипты написаны на C#, начинаются после 101-го номера в списке скриптов.
Используются скрипты во входных и выходных формулах входных и расчётных/выходных каналах (входные формулы для входных и входные-выходные для расчётных/выходных).Это обычные формулы по типу:
public class PreviousStatus { public int PrevSpeedStat { get; set; } public int PrevDelaySpeedStat { get; set; } public double PrevSpeedValue { get; set; } public int PrevAccelStat { get; set; } public int PrevDelayAccelStat { get; set; } public double PrevAccelValue { get; set; } public int PrevMovementStat { get; set; } public int PrevDelayMovementStat { get; set; } public double PrevMovementValue { get; set; } public bool AlarmCheck { get; set; } public bool DangerCheck { get; set; } public bool WarningCheck { get; set; } public bool NormalCheck { get; set; } public bool LowCheck { get; set; } public DateTime AlarmDT { get; set; } public DateTime DangerDT { get; set; } public DateTime WarningDT { get; set; } public DateTime NormalDT { get; set; } public DateTime LowDT { get; set; } } public double GetAccelValue(int status, double value, PreviousStatus prevStatus) { if (status != prevStatus.PrevDelayAccelStat) { prevStatus.PrevDelayAccelStat = status; prevStatus.PrevAccelValue = value; return value; } else { return prevStatus.PrevAccelValue; } }23.10.2025 в 19:57 #40853
manjey73УчастникНомер строки указывает при ошибке?
Потом в файле формул найти по строке и сделать вывод почему?24.10.2025 в 13:19 #40854vg
Участник24.10.2025 в 13:24 #40857
manjey73УчастникCalcEngine.cs — Открываете в папке логов этот файл и ищите по строке.
нужен текстовый редактор, который считает строки :).И смотрите что не так, что типа ему не нравится.
24.10.2025 в 15:38 #40859vg
УчастникВ этом и проблема: ему всё нравится 😀
24.10.2025 в 16:51 #40860
manjey73УчастникТак начните с малого, чтобы понять, что не нравится.
24.10.2025 в 16:53 #40861
MikhailМодераторДобрый день!
Ошибка связана в Вашей функцией GetMin. Нужно найти в скриптах, где она описана и где используется.24.10.2025 в 16:54 #40862
manjey73Участникошибка cs8801: Не удается использовать локальную переменную или локальную функцию ‘getMin’, объявленную в инструкции верхнего уровня в этом контексте
Или переменной (функции) нет, или к ней доступа, потому что она не public.
В 6-й версии вроде обязательно указывать, иначе не алё24.10.2025 в 16:54 #40863
manjey73УчастникА может что-то другое.
27.10.2025 в 17:09 #40888vg
УчастникПроблема была в том, что для экземпляров класса, например класса PreviousStatus, необходимо было указать модификатор public.
То есть написать
PreviousStatus prevStatus = new PreviousStatus();
неправильно.А вот
public PreviousStatus prevStatus = new PreviousStatus();
работает27.10.2025 в 17:23 #40889vg
УчастникНо ещё одним моментом является «кривой» перенос символов «>», «<«, «&».
В xml они закодированы как «& gt;», «& lt;» и «& amp;» соответственно.В результате, методы и классы воспринимаются средой как некой солянкой из символов.
Тоже нужно быть внимательным.
28.10.2025 в 06:43 #40890
manjey73УчастникЯ для работы с текстовыми файлами использую AcelPad, если не ошибся в названии.
У вас все файлы должны быть в кодировке utf без BOM.
Это некоторая особенность, так как все файлы должны работать и в Windows и в Linux.Не сохраняйте их виндовым NotePad и будет вам щастье 😀
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.