█ 02.02.2017 12:25
День добрый
Есть весы Cas 5000j, прошивка при включении 2.1.7.S
Встала задача печати состава продукта.
Скачал Cl-works pro. Настроил сообщения — закинул в весы.
Теперь пытаюсь сделать этикетку —
попытки прочесть этикетки с весов дают ошибку
192.168.0.15 Vesi Communication Error (0)
Делаю этикетку руками (штрих код, текст, состав), номер 51 и пробовал другие, попытка залить
192.168.0.15 Vesi System.Drawing.Bitmap Not support in this model (-1007)
Этикетки 58-40. Хотел на таких уместить состав..
Хорошо, ну не выходит. Пробую указать под конкретный товар свою этикетку, допустим 60 формат. Там есть состав.
Если ставлю в сам товар в поле LabelNo — что в весах, что через утилиту — весы все равно печатают ОБЩУЮ этикетку заданную в меню 1510.
Объясните как или присвоить конкретному товару свой формат этикетки и как можно загрузить свой формат этикетки в весы ? (58-40 с текстами сообщений состава продукта).
█ 02.02.2017 13:14
Для начала необходимо удостовериться, что коннект с весами проходит:
█ 02.02.2017 13:21
Цитата:
Vacony ➤ Хорошо, ну не выходит. Пробую указать под конкретный товар свою этикетку, допустим 60 формат. Там есть состав.
Если ставлю в сам товар в поле LabelNo — что в весах, что через утилиту — весы все равно печатают ОБЩУЮ этикетку заданную в меню 1510.
Прежде пользовательский шаблон необходимо загрузить в весы.
Прикрепите ваш шаблон в формате .lfm, посмотрю, что не так
█ 02.02.2017 13:46
Коннект есть. И в тесте, и товары заливаются.
Проблема что весы не понимают индивидуальный номер этикетки. И не дают считать этикетки из весов на ПК.
У меня бумага 58-40, был формат этикетки 4. Просто хотел добавить ниже состав ) Думал будет проще..
Прикладываю этикетку
█ 02.02.2017 13:47
Методом перебора выяснил, что если добавлять в этикетку текст — выгрузка не проходит…
Т.е. вывести цену можно, а рядом подпись ЦЕНА — не дает.
█ 02.02.2017 14:32
Vacony, убрал sample text, т.к. данное поле не поддерживается этой моделью. Добавил ЦЕНА, СУММА, ВЕС. Проверяйте. У меня все работает.
█ 02.02.2017 15:10
спасибо большое ) пока ковырял примерно к этому же пришел..
итого — вытянуть форматы с весов этикеток в ПК — нельзя тут.
надписи можно брать только с коллекции что идет в этикетке. написать свое что то нельзя.
Подвязать разный формат этикеток на разные товары тоже не выходит — печатается всегда общая этикетка заданная в меню 1510 на PLU. поле формат этикетки из таблицы PLU почему то игнорируется. что туда ни ставишь этикетка не меняется.
И последний вопрос, вдруг знаете. В весы всегда закидывал товары через библиотеку ForCas2.dll . Теперь вот надо закидывать состав, метод SendMSG отрабатывает , но в самих весах если вычитывать то что передалось — получается каша.
█ 02.02.2017 15:18
Цитата:
Vacony ➤ вытянуть форматы с весов этикеток в ПК — нельзя тут
только с 51 по 60 форматы
Цитата:
Vacony ➤ надписи можно брать только с коллекции что идет в этикетке. написать свое что то нельзя.
да, поле «текст» не поддерживается
Цитата:
Vacony ➤ Подвязать разный формат этикеток на разные товары тоже не выходит — печатается всегда общая этикетка заданная в меню 1510 на PLU. поле формат этикетки из таблицы PLU почему то игнорируется. что туда ни ставишь этикетка не меняется.
Можно, если предварительно создать и загрузить пользовательский формат с номером от 51 до 60.
Цитата:
Vacony ➤ И последний вопрос, вдруг знаете. В весы всегда закидывал товары через библиотеку ForCas2.dll . Теперь вот надо закидывать состав, метод SendMSG отрабатывает , но в самих весах если вычитывать то что передалось — получается каша.
Тут не подскажу
█ 02.02.2017 15:22
да точно, попробовал старой версией Cl work — 2.96.10
Указал 59-60, вытянул файлики. Но она не работает с отделами.. ни выгрузить ни загрузить…
Т.е. к товарам можно подвязать только 51-60 форматы индивидуально ? сейчас попробую…
█ 02.02.2017 15:29
Вот товары с выбранными разными этикетками. При печати печатается всегда одна общая для всех товаров в настройках весов
Часовой пояс GMT +3, время: 20:10.
Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.
Я написал программу, которая включает в себя использование операторов switch… Однако при компиляции она показывает:
Ошибка: переход к метке case.
Почему он это делает?
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
using namespace std;
class contact
{
public:
string name;
int phonenumber;
string address;
contact() {
name= "Noname";
phonenumber= 0;
address= "Noaddress";
}
};
int main() {
contact *d;
d = new contact[200];
string name,add;
int choice,modchoice,t;//Variable for switch statement
int phno,phno1;
int i=0;
int initsize=0, i1=0;//i is declared as a static int variable
bool flag=false,flag_no_blank=false;
//TAKE DATA FROM FILES.....
//We create 3 files names, phone numbers, Address and then abstract the data from these files first!
fstream f1;
fstream f2;
fstream f3;
string file_input_name;
string file_input_address;
int file_input_number;
f1.open("./names");
while(f1>>file_input_name){
d[i].name=file_input_name;
i++;
}
initsize=i;
f2.open("./numbers");
while(f2>>file_input_number){
d[i1].phonenumber=file_input_number;
i1++;
}
i1=0;
f3.open("./address");
while(f3>>file_input_address){
d[i1].address=file_input_address;
i1++;
}
cout<<"tWelcome to the phone Directoryn";//Welcome Message
do{
//do-While Loop Starts
cout<<"Select :n1.Add New Contactn2.Update Existing Contactn3.Display All Contactsn4.Search for a Contactn5.Delete a Contactn6.Exit PhoneBooknnn";//Display all options
cin>>choice;//Input Choice from user
switch(choice){//Switch Loop Starts
case 1:
i++;//increment i so that values are now taken from the program and stored as different variables
i1++;
do{
cout<<"nEnter The Namen";
cin>>name;
if(name==" "){cout<<"Blank Entries are not allowed";
flag_no_blank=true;
}
}while(flag_no_blank==true);
flag_no_blank=false;
d[i].name=name;
cout<<"nEnter the Phone Numbern";
cin>>phno;
d[i1].phonenumber=phno;
cout<<"nEnter the addressn";
cin>>add;
d[i1].address=add;
i1++;
i++;
break;//Exit Case 1 to the main menu
case 2:
cout<<"nEnter the namen";//Here it is assumed that no two contacts can have same contact number or address but may have the same name.
cin>>name;
int k=0,val;
cout<<"nnSearching.........nn";
for(int j=0;j<=i;j++){
if(d[j].name==name){
k++;
cout<<k<<".t"<<d[j].name<<"t"<<d[j].phonenumber<<"t"<<d[j].address<<"nn";
val=j;
}
}
char ch;
cout<<"nTotal of "<<k<<" Entries were found....Do you wish to edit?n";
string staticname;
staticname=d[val].name;
cin>>ch;
if(ch=='y'|| ch=='Y'){
cout<<"Which entry do you wish to modify ?(enter the old telephone number)n";
cin>>phno;
for(int j=0;j<=i;j++){
if(d[j].phonenumber==phno && staticname==d[j].name){
cout<<"Do you wish to change the name?n";
cin>>ch;
if(ch=='y'||ch=='Y'){
cout<<"Enter new namen";
cin>>name;
d[j].name=name;
}
cout<<"Do you wish to change the number?n";
cin>>ch;
if(ch=='y'||ch=='Y'){
cout<<"Enter the new numbern";
cin>>phno1;
d[j].phonenumber=phno1;
}
cout<<"Do you wish to change the address?n";
cin>>ch;
if(ch=='y'||ch=='Y'){
cout<<"Enter the new addressn";
cin>>add;
d[j].address=add;
}
}
}
}
break;
case 3 : {
cout<<"ntContents of PhoneBook:nntNamestPhone-NumberstAddresses";
for(int t=0;t<=i;t++){
cout<<t+1<<".t"<<d[t].name<<"t"<<d[t].phonenumber<<"t"<<d[t].address;
}
break;
}
}
}
while(flag==false);
return 0;
}
Ответ 1
Проблема состоит в том, что переменные, объявленные в одном case, все еще видны в следующем case, если не используется явный блок { }, но они не будут инициализированы, потому что код инициализации принадлежит другому case.
В следующем коде, если foo равно 1, все в порядке, но если оно равно 2, мы случайно используем переменную i, которая существует, но, вероятно, содержит мусор.
switch(foo) {
case 1:
int i = 42; // i exists all the way to the end of the switch
dostuff(i);
break;
case 2:
dostuff(i*2); // i is *also* in scope here, but is not initialized!
}
Обертка корпуса в явном блоке решает проблему:
switch(foo) {
case 1:
{
int i = 42; // i only exists within the { }
dostuff(i);
break;
}
case 2:
dostuff(123); // Now you cannot use i accidentally
}
Изменить
Чтобы уточнить, утверждения switch являются всего лишь особенно причудливым видом goto. Здесь аналогичный фрагмент кода имеет ту же проблему, но с использованием goto вместо switch:
int main() {
if(rand() % 2) // Toss a coin
goto end;
int i = 42;
end:
// We either skipped the declaration of i or not,
// but either way the variable i exists here, because
// variable scopes are resolved at compile time.
// Whether the *initialization* code was run, though,
// depends on whether rand returned 0 or 1.
std::cout << i;
}
Ответ 2
Заявление о новых переменных в заявлениях о случаях вызывает проблемы. Включение всех операторов case в {} ограничивает область новых объявленных переменных текущим исполняемым случаем, который решает проблему.
switch(choice)
{
case 1: {
// .......
}break;
case 2: {
// .......
}break;
case 3: {
// .......
}break;
}
Ответ 3
Стандарт С++ 11, перепрыгивающий через некоторые инициализации
JohannesD дал объяснение, теперь для стандартов.
Проект стандарта С++ 11 N3337 6.7 «Заявление декларации» гласит:
3 Можно передавать в блок, но не так, чтобы обойти объявления с инициализацией. Программа, которая переходит (87) из точки, в которой переменная с автоматическим хранением находится вне области действия, до точки, в которой она находится в области видимости, плохо сформирована, если переменная не имеет скалярного типа, типа класса с тривиальным конструктором по умолчанию и тривиальным деструктор, cv-квалифицированная версия одного из этих типов или массив одного из предыдущих типов и объявляется без инициализатора (8.5).
87) Переход от условия оператора switch к метке регистра считается скачком в этом отношении.
[ Пример:
void f() { // ... goto lx; // ill-formed: jump into scope of a // ... ly: X a = 1; // ... lx: goto ly; // OK, jump implies destructor // call for a followed by construction // again immediately following label ly }— конец примера]
Начиная с GCC 5.2, сообщение об ошибке теперь говорит:
пересекает инициализацию
С
C позволяет это: C99 Перейти к инициализации
Проект стандарта C99 N1256 Приложения я «Общие предупреждения» гласит:
2 Блок с инициализацией объекта, который имеет автоматическую продолжительность хранения, перемещается в
Ответ 4
JohannesD ответ правильный, но я чувствую, что не совсем ясно по аспекту проблемы.
Пример, который он приводит, объявляет и инициализирует переменную i в случае 1, а затем пытается использовать ее в случае 2. Его аргумент заключается в том, что если бы переключение перешло прямо к случаю 2, i бы использовал его без инициализации, и именно поэтому ошибка компиляции. В этот момент можно подумать, что не будет проблем, если переменные, объявленные в одном случае, никогда не будут использоваться в других случаях. Например:
switch(choice) {
case 1:
int i = 10; // i is never used outside of this case
printf("i = %dn", i);
break;
case 2:
int j = 20; // j is never used outside of this case
printf("j = %dn", j);
break;
}
Можно ожидать, что эта программа скомпилируется, так как i и j используются только внутри случаев, которые их объявляют. К сожалению, в C++ он не компилируется: как объяснил Ciro Santilli 包子 露 宪 六四 事件 法轮功, мы просто не можем перейти к case 2: так как это пропустит объявление с инициализацией i, и даже если case 2 вообще не использует i, это все еще запрещено в C++.
Интересно, что с некоторыми корректировками (#ifdef для #include соответствующего заголовка и точка с запятой после меток, поскольку за метками могут следовать только операторы, а объявления не считаются как операторы в C), эта программа компилируется как C:
// Disable warning issued by MSVC about scanf being deprecated
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#ifdef __cplusplus
#include <cstdio>
#else
#include <stdio.h>
#endif
int main() {
int choice;
printf("Please enter 1 or 2: ");
scanf("%d", &choice);
switch(choice) {
case 1:
;
int i = 10; // i is never used outside of this case
printf("i = %dn", i);
break;
case 2:
;
int j = 20; // j is never used outside of this case
printf("j = %dn", j);
break;
}
}
Благодаря онлайн-компилятору, например http://rextester.com, вы можете быстро попытаться скомпилировать его как C или C++, используя MSVC, GCC или Clang. Как C всегда работает (только не забудьте установить STDIN!), Как C++ ни один компилятор не примет это.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
#include <cstdlib> #include <iostream> #include <stdio.h> int vvod(int **l); int sum(int *m, int n); int asum(int *m, int n); using namespace std; int main() { int boq; do{ system("cls"); printf("ttt********MENU*********nn"); printf("1. Mechn"); printf("2. oqing n"); printf("3. bilmiman torisi n"); printf("4. amizi ying n"); printf("nnnzdelayte vash vibor:t"); int mech; scanf("%d", &mech); switch(mech){ case 1: for ( int i = 0; i < 10; i++ ) { printf("tttumniy moln"); } break; case 2: int *x, *y, *z; printf("zapolnite massiv X n"); int Nx = vvod(&x); int sumx = sum(x, Nx); int asumx = asum(x, Nx); printf("zapolnite massiv Y n"); int Ny = vvod(&y); int sumy = sum(y, Ny); int asumy = asum(y, Ny); printf("zapolnite massiv Z n"); int Nz = vvod(&z); int sumz = sum(z, Nz); int asumz = asum(z, Nz); printf("ttsumma polojitelnix chiseln"); printf("SumX = %dnSumY = %dnSumZ = %dnn", sumx, sumy, sumz); printf("ttsumma otricatelnix chiseln"); printf("aSumX = %dnaSumY = %dnaSumZ = %dn", asumx, asumy, asumz); break; case 3: printf("qandayn"); break; default: printf("net takoy operaciin"); break; } printf("xotite eshe raz najmite 1:n", boq); scanf("%d", &boq); }while(boq==1); system("PAUSE"); puts("konets"); return 0; } //////////////////////////////////////////////////// int vvod(int **l) { int n; printf("tt ukajite razmer massiva: "); scanf("%d", &n); int *m = new int[n]; for (int i = 0; i < n; i++) { printf("element%d: ", i + 1); scanf("%d", &(m[i])); } *l = m; return n; } int sum(int *m, int n) { int sum = 0; for (int i = 0; i < n; i++) if (m[i] > 0) sum += m[i]; return sum; } int asum(int *m, int n) { int sum = 0; for (int i = 0; i < n; i++) if (m[i] < 0) sum += m[i]; return sum; } |
Решение проблем весов CL
Вопросы и ответы
В: Не получается установить соединение весов с компьютером
О: Для успешного соединения:
1. Подключите весы к компьютеру при помощи кабеля Ethernet/RS-232C.
2. Затем на компьютере откройте «Панель управления» -> «Центр управления сетями и общим доступом», где появится новое «Подключение по локальной сети». Откройте его и выберите «Свойства» -> «Протокол интернета версии 4». В открывшемся окне выберите «Использовать следующий IP-адрес» и установите необходимый IP-адрес и маску подсети (например, 192.168.0.1 и 255.255.255.000 соответственно).
3. Затем откройте меню весов 1913 и введите IP-адрес и маску подсети весов (для нашего примера 192.168.0.2 и 255.255.255.000). Убедитесь в том, что адрес порта в меню 1913 = 20304.
4. Откройте в CL-Works меню «Config» -> «Обмен данными » и нажмите кнопку «Добавить». В открывшемся окне введите IP-адрес весов, порт= 20304, выберите модель весов и нажмите «Add». Затем в правой части окна нажмите «Save» для сохранения настроек. (01.10.16)
В: Как загрузить видео для проигрывания в CL7000S?
В: Как назначить быструю смену формата этикетки на клавишу?
В: В CL-Works при попытке загрузки этикетки на весы сообщение об ошибке «Unused items».
В: Актуально для весов CL3000 и CL7000: ошибка диапазона после включения питания.
В: На полной версии и её производных в процессе самодиагностики после включения питания ошибка «Wrong MAC».
В: Где можно получить краткое руководство по работе с программой CL-Works?
В: Как настроить работу процентной массы в весах серии CL?
В: Как зайти в настройки параметров?
В: (CL3000/5000-D/7000S) Не удается загрузить большой текст состава продукта. Текст обрезается или возникает ошибка «PLU 1 Department 1»
В: (CL3000/5000-D) Как настроить клавишу быструю смены цены за килограмм?
В: (CL3000/5000-D) Как настроить клавишу быстрой смены срока годности?
В: При запуске программа CL-Mart Pro требует имя и пароль. Где их взять?
В (CL7000S): как настраивать кнопки на экране? Возможно ли это сделать автоматически, через программу(удаленно). или для расстановки кнопок на экране необходим «личный» контакт с весами.
В (CL7000S): проблема следующая — загружаем список товаров в весы(нумерация PLU c 100 по 766), на экране они появляются, но первые 3 страницы экрана пустые, на четверной половина пустая, а вторая заполнена уже товарами, но со 145 и пятая страница тоже с товарами, но до 200. Вопрос — как «сдвинуть» отображение товаров на первую страницу?
В(CL7000S):Как добавить больше страниц с товарами на дисплей весов?
В (CL7000S): есть ли в весах поиск товара по имени или номеру?
В (CL3000/CL7000/CL5000-D): как сделать, чтобы после печати этикетки товар не сбрасывался?
В(CL5000J): Добавляю на формат этикетки изображение и загружаю этот формат в весы, а затем делаю следующий формат этикетки с новым изображением, и загружаю его. После этого и на первой и на второй этикетках одно и то же изображение.
В: По новому требованию наших партнёров нужен штрих-код GS1 Databar Expanded Stacked. Какие весы CAS поддерживают работу с этим штрих-кодом?
В: (CL3000) Печать на этикетке происходит между этикеток. При этом после печати вылезает часть следующей этикетки.
В: (CL5000J): Как сделать так, чтобы этикетка печаталась автоматически, когда товар кладут на весы, без необходимости нажимать клавишу ПЕЧ?
В: На каких весах CL можно печатать штрихкод Databar Expanded Stacked?
В: Как напечатать штрихкод Databar Expanded Stacked на весах CL3000/3000J/7000S/7000P?
В: возможно ли с помощью программы CL Works экспортировать и импортировать все настройки с одних весов, на другие?
В(CL3000): Как настроить вывод массы продукта без глазури (функция процентной тары)?
В: (CL-Works): Сообщите пароль для архива базы данных программы CL-Works
В (CL3000):Можно ли задать дополнительную тару, если товар уже имеет запрограммированную массу тары?
В: Нельзя напечатать этикетку для продукта массой меньше минимальной нагрузки. Можно ли отменить или снизить порог минимальной нагрузки на весах?
В (CL5000J): Как можно вывести состав более 300 символов на печать?
В (CL5000J): Как можно печатать номерной состав?
В (CL5000J): Можно ли на этикетку вывести длинный статический текст с адресом (40 символов)?
В (CL5000J):Можно ли посмотреть программу для редактора этикеток для весов 3000 и 5000 ? У меня стоит 2.96.10 CL-Works но там всё для линейки 5000 и 5000J?
В: Возможно ли на весах CL-5000 и CL-5000j сделать формат штрих-кода SSCC? Если нет, подскажите, какие весы его поддерживают?
В (CL3000J): Как включить функцию реверса на весах CL3000J?
В (CL3000, CL3000J, CL5000-D, CL7000): Можно ли округлить стоимость на весах?
В: (CL3000J) Как включить работу с массой глазури в CL3000J?
В: Как сбросить/посмотреть пароль на весах CL3000, CL3000J, CL5000-D?
Ошибка: error 001: expected token: «;», but found «бла-бла»
Решение: Идём на строку выше той, что указана в ошибке и ставим в конце ; (точку с запятой).
Ошибка: error 021: symbol already defined: «бла-бла» или warning 219: local variable «бла-бла» shadows a variable at a preceding level
Решение: Ошибка появляется, если вы несколько раз создали одну и ту же переменную,stock,public.Для решения вам просто требуется удалить дубликат.
Ошибка: error 024: «break» or «continue» is out of context
Решение: break,continue используется только в цикле (for), данная ошибка появляется, если вы использовали их не в цикле. Для решения вам нужно просто заменить их.
Ошибка: error 032: array index out of bounds (variable «cartek»)
Решение: Ошибка появляется, если у вас превышен индекс массива. Для решение вам просто надо увеличить ‘число’ в создании массива.
Ошибка: error 040: duplicate «case» label (value %d)
Решение: Ошибка появляется, если вы два раза используете case с одним и тем же параметром.
Ошибка: fatal error 100: cannot read from file: «бла-бла»
Решение: Ошибка появляется, если вы подключили инклуд и не добавили в папку pawno/include. Для решения вам просто надо добавить в папку данный инклуд.
Ошибка: warning 203: symbol is never used: «бла-бла»
Решение: Ошибка появляется, если созданная переменная нигде не используется. Для решения вам просто требуются ещё удалить.
Ошибка: warning 209: function «бла-бла» should return a value
Решение: Для решения проблемы в данной функции/команде вам следует добавить в конец return true/return false.
Ошибка: warning 217: loose indentation
Решение: Для решения проблемы выровняйте строки.
Ошибка: warning 235: public function lacks forward declaration (symbol «бла-бла»)
Решение: Ошибка появляется, если вы создали public,а forward нет. Для решения вам просто надо создать forward к public’y.
По мере возможности тема будет дополняться
Ошибка: error 001: expected token: «;», but found «]»(пример)
Решение: Идём на строку выше той, что указана в ошибке и ставим в конце: ;
Ошибка: error 021: symbol already defined: «понятно в общем» или warning 219: local variable «тоже» shadows a variable at a preceding level
Решение: Ошибка появляется, если вы несколько раз создали одну и ту же переменную, stock, public.Для решения вам просто требуется удалить дубликат.
Ошибка: error 024: «break» or «continue» is out of context
Решение: break, continue используется только в цикле (for), данная ошибка появляется, если вы использовали их не в цикле. Для решения вам нужно заменить их.
Ошибка: error 032: array index out of bounds (variable «cartek»)
Решение: Ошибка появляется, если у вас превышен индекс массива. Для решения вам просто надо увеличить число в создании массива.
Ошибка: error 040: duplicate «case» label (value %d)
Решение: Ошибка появляется, если вы два раза используете case с одним и тем же параметром.
Ошибка: fatal error 100: cannot read from file: «понятно»
Решение: Ошибка появляется, если вы подключили инклуд и не добавили в папку pawno/include. Для решения вам просто надо добавить в папку данный инклуд.
Ошибка: warning 203: symbol is never used: «гы»
Решение: Ошибка появляется, если созданная переменная нигде не используется. Для решения вам просто требуются ещё удалить.
Ошибка: warning 209: function «ясно» should return a value
Решение: Для решения проблемы в данной функции/команде вам следует добавить в конец return true/return false.
Ошибка: warning 217: loose indentation
Решение: Для решения проблемы выровняйте строки.
Ошибка: warning 235: public function lacks forward declaration (symbol «ясно»)
Решение: Ошибка появляется, если вы создали public,а forward нет. Для решения вам просто надо создать forward к public’y.
Ошибка: fatal error 107: too many error messages on one line
Решение: Исправьте ошибки, которые даны выше, в частности в 1 строке. Именно поэтому выходит такая ошибка.
Ошибка: fatal error 100: cannot read from file: «%s»
Решение: Возможно вы удалили какую-то строку/файл, которую нужно добавить и проблема будет решена, вместо %s вам будет дана это строка/файл. Насколько я помню
Автор: Transcend
Тему можно дополнять!
Как исправить Error
Автор: neka
Значение Error можно посмотреть здесь.
error 040: duplicate «case» label (value 28)
Это означает что case стаким значением повторяется. Решение этой проблемы простое — нам нужно цифру 28 изменит на другую (в той строчке на которую жалуется )
error 032: array index out of bounds (variable «JoinPed»)
Это означает что индекс массива превышен (но не всегда, смотрим дальше) Пример:
131 — массив поигравшись с ним я понял что дело не в нем, а в чём же спросите вы? Пример данной ошибки:
Код: Выделить всё
else if(SelectCharPlace[playerid] == 2) { SetPlayerSkin(playerid, JoinPed[123][0]); SelectCharPlace[playerid] = 3; InviteSkin[playerid] = JoinPed[98][0]; }
как видим — JoinPed[123] сначало с таким значением, а потом JoinPed[98]. Решение простое: JoinPed[123] число в данных скобках должно быть одинаковым. Пример:
Код: Выделить всё
else if(SelectCharPlace[playerid] == 2) { SetPlayerSkin(playerid, JoinPed[123][0]); SelectCharPlace[playerid] = 3; InviteSkin[playerid] = JoinPed[123][0]; }
error 037: invalid string (possibly non-terminated string)
Это означает что строка неправильная, а точнее где то допущена ошибка:
Код: Выделить всё
else if(PlayerInfo[targetid][pRank] == 4) { rangz = "Зам.модера; }
как видим нам после слова «модера» не хватает «. Правим:
Код: Выделить всё
else if(PlayerInfo[targetid][pRank] == 4) { rangz = "Зам.модера"; }
error 001: expected token: «,», but found «;»
Это значит что мы пропустили знак или скобку (в данном примере скобку) Пример:
Код: Выделить всё
public SaveProdykts()
{
new idx;
new File: file2;
while (idx < sizeof(ProdyktsInfo))
{
new coordsstring[256];
format(coordsstring, sizeof(coordsstring), "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%dn",
ProdyktsInfo[idx][prSous],
ProdyktsInfo[idx][prPizza],
ProdyktsInfo[idx][prMilk],
ProdyktsInfo[idx][prJuice],
ProdyktsInfo[idx][prSpirt],
ProdyktsInfo[idx][prChicken],
ProdyktsInfo[idx][prKolbasa],
ProdyktsInfo[idx][prFish],
ProdyktsInfo[idx][prIceCream],
ProdyktsInfo[idx][prChips],
ProdyktsInfo[idx][prZamProd];
if(idx == 0)
{
file2 = fopen("[prodykts]/prodykts.cfg", io_write);
}
else
{
file2 = fopen("[prodykts]/prodykts.cfg", io_append);
}
fwrite(file2, coordsstring);
idx++;
fclose(file2);
}
return 1;
}
смотрим на:
и вим что мы ппропустили )
Правим:
И в итоге:
Код: Выделить всё
public SaveProdykts()
{
new idx;
new File: file2;
while (idx < sizeof(ProdyktsInfo))
{
new coordsstring[256];
format(coordsstring, sizeof(coordsstring), "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%dn",
ProdyktsInfo[idx][prSous],
ProdyktsInfo[idx][prPizza],
ProdyktsInfo[idx][prMilk],
ProdyktsInfo[idx][prJuice],
ProdyktsInfo[idx][prSpirt],
ProdyktsInfo[idx][prChicken],
ProdyktsInfo[idx][prKolbasa],
ProdyktsInfo[idx][prFish],
ProdyktsInfo[idx][prIceCream],
ProdyktsInfo[idx][prChips],
ProdyktsInfo[idx][prZamProd]);< ----------- И вот наша скобка
if(idx == 0)
{
file2 = fopen("[prodykts]/prodykts.cfg", io_write);
}
else
{
file2 = fopen("[prodykts]/prodykts.cfg", io_append);
}
fwrite(file2, coordsstring);
idx++;
fclose(file2);
}
return 1;
}
error 002: only a single statement (or expression) can follow each «case»
Это означает что у вас после «case» идет if(dialogid == ). Пример:
Код: Выделить всё
case 7507:
{
if(response) ClothesSex[playerid] = 1;
else ClothesSex[playerid] = 2;
ShowPlayerDialog(playerid,7504,2,"??????? ??????","{A0B0D0}?????????? ?????? {7CC000}300$n{A0B0D0}??????? ?????? {7CC000}300$n{A0B0D0}???????????? ?????? {7CC000}300$n{A0B0D0}?????","???????","?????");
return 1;
}
if(dialogid == 7504) <------------------- вот наша и ошибка
{
if(response)
{
SetCameraBehindPlayer(playerid); TogglePlayerControllable(playerid, 1);
SetPlayerSkin(playerid, PlayerInfo[playerid][pModel]);
ClothesRun[playerid] = 0;
return 1;
}
Решение простое: if(dialogid == 7504) это нам нужно заменить на case как и последующий диалог !
Код: Выделить всё
case 7504: <------------------- вот так это выглядит
{
if(response)
{
SetCameraBehindPlayer(playerid); TogglePlayerControllable(playerid, 1);
SetPlayerSkin(playerid, PlayerInfo[playerid][pModel]);
ClothesRun[playerid] = 0;
return 1;
}
error 004: function «%s» is not implemented
Это означает что мы пропустили скобку. Мой совет:
- проверить весь код в ручную
- на форуме был урок как найти не по ставленую скобку
- Можно воспользоватся notepad++ там показы линии открытых скобок и тогда можно найти эту скобку
error 017: undefined symbol %s
Это означает что мы не поставили переменную new. Пример:
Решение — ко всем new добавим:
← →
Dr.Andrew
(2008-04-05 20:15)
[0]
Уважаемые Мастера, подскажите почему не работает конструкция и как можно решить проблему, чтобы она заработала правильно:
type
TSampleType = (stX, stY, stZ);
TSampleTipes = set of TSampleType;
private
FSampleType : TSampleTipes;
function GetInfoAboutSampleType() : String;
begin
case Integer(FSampleType) of
0 : Result := stX;
1 : Result := stY;
2 : Result := stZ;
0, 1 : Result := stX + stY;
0, 2 : Result := stX + stZ;
1, 2 : Result := stY + stZ;
else Result := stX + stY + stZ;
end;
end;
Спасибо!
![]()
![]()
← →
Loginov Dmitry ©
(2008-04-05 20:25)
[1]
Byte()
![]()
![]()
← →
Dr.Andrew
(2008-04-05 20:32)
[2]
Спасибо!
Но компилятор выдает все же еще одну ошибку ошибку:
«[Pascal Error] Unit1.pas(218): E2030 Duplicate case label»
на строчках:
0, 1 : Result := stX + stY;
0, 2 : Result := stX + stZ;
1, 2 : Result := stY + stZ;
Как можно исправить эту проблему.
Спасибо!
![]()
![]()
← →
Dr.Andrew
(2008-04-05 20:37)
[3]
Извинте небольшое уточнение предыдущего примера:
type
TSampleType = (stX, stY, stZ);
TSampleTipes = set of TSampleType;
private
FSampleType : TSampleTipes;
FstX; FstY; FstZ : String;
function GetInfoAboutSampleType() : String;
begin
case Byte(FSampleType) of
0 : Result := FstX;
1 : Result := FstY;
2 : Result := FstZ;
0, 1 : Result := FstX + FstY;
0, 2 : Result := FstX + FstZ;
1, 2 : Result := FstY + FstZ;
else Result := FstX + FstY + FstZ;
end;
end;
Теперь компилятор выдает еще одну ошибку:
«[Pascal Error] Unit1.pas(218): E2030 Duplicate case label»
на строчках:
0, 1 : Result := FstX + FstY;
0, 2 : Result := FstX + FstZ;
1, 2 : Result := FstY + FstZ;
Как можно исправить эту проблему.
Спасибо!
![]()
![]()
← →
Anatoly Podgoretsky ©
(2008-04-05 20:40)
[4]
> Dr.Andrew (05.04.2008 20:15:00) [0]
Изобрел новый язык.
![]()
![]()
← →
Denis__ ©
(2008-04-05 20:49)
[5]
> Dr.Andrew (05.04.08 20:37) [3]
А как вы себе это представляете?
![]()
![]()
← →
Anatoly Podgoretsky ©
(2008-04-05 20:51)
[6]
> Denis__ (05.04.2008 20:49:05) [5]
Ну вообще то не сложно, только вот что автор пытается реализовать, а то я насчитал столько вариантов.
Но все они реализуются в основном через тривиальный IF
![]()
![]()
← →
Семеныч
(2008-04-05 21:07)
[7]
> Dr.Andrew (05.04.08 20:37) [3]
Предположим, Byte(FSampleType) равно 2. И что делать, если у Вас написано:
2 : Result := FstZ;
0, 2 : Result := FstX + FstZ;
1, 2 : Result := FstY + FstZ;
Вот об этом Вам компилятор и сообщает — «Duplicate case label». Что по-русски означает: «Слушай, а ты сам-то понимаешь, чего ты хочешь?»
![]()
![]()
← →
Dummy
(2008-04-06 06:18)
[8]
> case Integer(FSampleType) of
А что, уже отменили перечисления в Case?
![]()
![]()
← →
korneley ©
(2008-04-06 08:43)
[9]
> А что, уже отменили перечисления в Case?
Нет, пока только дубликаты (пересечения)
![]()
![]()
← →
Anatoly Podgoretsky ©
(2008-04-06 12:08)
[10]
Dummy (06.04.08 06:18) [8]
Не запрещали, но запретили писать ерунду в этих перечисления и еще в 1971 году.
![]()
![]()
← →
Dummy
(2008-04-07 05:48)
[11]
> Нет, пока только дубликаты (пересечения)
> Не запрещали, но запретили писать ерунду в этих перечисления
> и еще в 1971 году.
Я спрашивал про перечисления, а не про конструкцию case.
А вообще, если объявить
type
TSampleType = (stX = 1, stY = 2, stZ = 4);
то
case Byte(FSampleType) of
1 : Result := FstX;
2 : Result := FstY;
4 : Result := FstZ;
1 + 2 : Result := FstX + FstY;
1 + 4 : Result := FstX + FstZ;
2 + 4 : Result := FstY + FstZ;
else Result := FstX + FstY + FstZ;
end;
спасет отца русской демократии.
![]()
![]()
← →
korneley ©
(2008-04-07 10:45)
[12]
> Dummy (07.04.08 05:48) [11]
В консерватории (case) поправили. А как с типом Result быть? Сдаётся, что он, типа, строка… 🙂
![]()
![]()
← →
Плохиш ©
(2008-04-07 10:45)
[13]
> Dummy (07.04.08 05:48) [11]
Какое отношение твой код имеет к вопросу ветки? И даже к твоему вопросу про перечисления?
![]()
![]()
← →
korneley ©
(2008-04-07 10:50)
[14]
> Плохиш © (07.04.08 10:45) [13]
Ну нет. В смысле [0]»и как можно решить проблему, чтобы она заработала правильно», дело туго, но движется. Ещё бы это «правильно» протелепатировать :)))
![]()
![]()
← →
Плохиш ©
(2008-04-07 10:56)
[15]
> korneley © (07.04.08 10:50) [14]
И как поможет решить проблему замена 0,1,2 на 1,2,4 и вписывание 4х бессмысленных строчек в case?
![]()
![]()
← →
korneley ©
(2008-04-07 11:11)
[16]
> И как поможет решить проблему замена 0,1,2 на 1,2,4
Транслятор выдаст другую ошибку 🙂
![]()
![]()
← →
Семеныч
(2008-04-07 11:32)
[17]
> Dummy (07.04.08 05:48) [11]
Вот эти 4 строчки не будут выполнены
никогда
:1 + 2 : Result := FstX + FstY;
1 + 4 : Result := FstX + FstZ;
2 + 4 : Result := FstY + FstZ;
else Result := FstX + FstY + FstZ;
![]()
![]()
← →
korneley ©
(2008-04-07 11:43)
[18]
> Семеныч (07.04.08 11:32) [17]
Дык, понятно. Но, не из-за «1 + 2».
![]()
![]()
← →
Семеныч
(2008-04-07 12:41)
[19]
> korneley © (07.04.08 11:43) [18]
Не может быть!
![]()
![]()
← →
Dummy
(2008-04-07 23:02)
[20]
> Вот эти 4 строчки не будут выполнены никогда
FSampleType : TSampleTipes;
TSampleTipes = set of TSampleType;
![]()
![]()
← →
Плохиш ©
(2008-04-07 23:14)
[21]
> Dummy (07.04.08 23:02) [20]
>
> > Вот эти 4 строчки не будут выполнены никогда
>
> FSampleType : TSampleTipes;
> TSampleTipes = set of TSampleType;
И что ты хотел сказать?
![]()
![]()
← →
Германн ©
(2008-04-08 01:14)
[22]
> Почему не работает конструкция case of
>
1. Потому что «selectorExpression is any expression of an ordinal type», а «set of
TSampleType» к таковым не относится.
2. Потому что не знаешь основ и не можешь соотнести некое «множество» к реальному содержимому памяти, которое оно занимает.
> и как решить проблему?
Для данного примера — просто:function GetInfoAboutSampleType() : String;
begin
case Byte(FSampleType) of
0 : Result := FstX;
1 : Result := FstY;
2 : Result := FstZ;
3 : Result := FstX + FstY;
5 : Result := FstX + FstZ;
6 : Result := FstY + FstZ;
else Result := FstX + FstY + FstZ;
end;
end;
![]()
![]()
← →
Семеныч
(2008-04-08 02:45)
[23]
> Dummy (07.04.08 23:02) [20]
Не может быть!
![]()
![]()
← →
Dummy
(2008-04-09 08:34)
[24]
> function GetInfoAboutSampleType() : String;
> begin
> case Byte(FSampleType) of
> 0 : Result := FstX;
> 1 : Result := FstY;
> 2 : Result := FstZ;
> 3 : Result := FstX + FstY;
> 5 : Result := FstX + FstZ;
> 6 : Result := FstY + FstZ;
> else Result := FstX + FstY + FstZ;
> end;
> end;
> 2. Потому что не знаешь основ и не можешь соотнести некое
> «множество» к реальному содержимому памяти, которое оно
> занимает
Вот и соотнесите:
type
A = (a1, a2, a3);
AA = set of A;
var
B: AA;
begin
B := [a1];
ShowMessage(IntToStr(Byte(B)));
end;
Знатоки, блин, основ. Set of == битовый массив.
![]()
![]()
← →
Dummy
(2008-04-09 08:39)
[25]
> TSampleType = (stX = 1, stY = 2, stZ = 4);
Написано для просветления ваших умов — надеялся, что в памяти у вас всплывет, какие биты какому значению будут соответствовать.
> 1 + 2 : Result := FstX + FstY;
Аналогично вышесказанному.
> Вот эти 4 строчки не будут выполнены никогда:
> 1 + 2 : Result := FstX + FstY;
> 1 + 4 : Result := FstX + FstZ;
> 2 + 4 : Result := FstY + FstZ;
> else Result := FstX + FstY + FstZ;
Прежде, чем что-то утверждать, не мешало бы это что-то проверить. Ну или, на худой конец, справку почитать.
![]()
![]()
← →
Семеныч
(2008-04-09 09:10)
[26]
> Dummy (09.04.08 08:34) [24]
> Set of == битовый массив.
Не может быть!
![]()
![]()
← →
Семеныч
(2008-04-09 09:21)
[27]
<Философски-задумчиво> Вот и еще один… сколько ж их…
![]()
![]()
← →
Anatoly Podgoretsky ©
(2008-04-09 16:22)
[28]
> Dummy (09.04.2008 08:39:25) [25]
> TSampleType = (stX = 1, stY = 2, stZ = 4);
Set of? Пойду вешаться
![]()
![]()