Меню

Case label editor ошибка связи

█ 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

Для начала необходимо удостовериться, что коннект с весами проходит:

Миниатюры

Нажмите на изображение для увеличения
Название: Screenshot_104.png
Просмотров: 687
Размер:	25.3 Кб
ID:	8111   Нажмите на изображение для увеличения
Название: Screenshot_105.png
Просмотров: 549
Размер:	19.5 Кб
ID:	8112  

█ 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

Вот товары с выбранными разными этикетками. При печати печатается всегда одна общая для всех товаров в настройках весов

Миниатюры

Нажмите на изображение для увеличения
Название: Безымянный.JPG
Просмотров: 587
Размер:	61.4 Кб
ID:	8117  

Часовой пояс 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;
}

4b9b3361

Ответ 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(playerid1); 
              
SetPlayerSkin(playeridPlayerInfo[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? Пойду вешаться


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Cas ошибка контакт 50
  • Cas cl5000j ошибка нет места