Русское сообщество по скриптингу

error 039: constant symbol has no size

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

error 039: constant symbol has no size

Сообщение Lethargy » 04 фев 2018, 00:07

Парни, не вдупляю как это работает. Почему сыпятся ошибки. Конпилятор говорит в чем ошибка, но как это исправить я не бум бум. Помогите пожалуйста.





Код: Выделить всё
#include <amxmodx>
#include <sockets>
#include <json>

#define TCP_HOST "localhost"
#define TCP_PORT 3000

new g_socket = 0;
new g_last_error = 0;

public plugin_init() {
   register_plugin("For Test Socket","0.0.1","Сосисон");
   g_socket = socket_open(TCP_HOST, TCP_PORT, SOCKET_TCP, g_last_error , 0);

   if(g_last_error == 0) {
      console_print(0, "Соединение с TCP сервером установлено: %s:%i", TCP_HOST, TCP_PORT);
   } else {
      console_print(0, "Соединенте с ТСР сервером не установлено: %s", socket_err_code2text(g_last_error));
   }
}

socket_err_code2text(err) {
   switch(err) {
      case 1: {
         return "1 - Error while creating socket";
      }
      case 2: {
         return "2 - Couldn't resolve hostname";
      }
      case 3: {
         return "3 - Couldn't connect";
      }
      case 0: {
         return "0 - No error";
      }
   return "? - Unknown error";

Неинформативное название темы (устное замечание) // Subb98
Lawful evil ]:->

Были бы в языке pawn объекты, было бы круто. Почему нет объектов в павне?
Аватара пользователя
Lethargy
 
Сообщения: 179
Зарегистрирован: 12 мар 2017, 17:25
Благодарил (а): 34 раз.
Поблагодарили: 15 раз.
Языки программирования: За 3-4 часа любой язык

Re: Оно мне говорит ошибу, но я его не понимаю

Сообщение Stimul » 04 фев 2018, 00:32

Lethargy, для начала не закрыта скобка в переключателе switch.
Ты хоть бы файл json.inc приложил, или ты думаешь, он у всех есть?
Аватара пользователя
Stimul
 
Сообщения: 3582
Зарегистрирован: 04 янв 2012, 19:51
Благодарил (а): 192 раз.
Поблагодарили: 1163 раз.
Опыт программирования: Больше трех лет

Re: Оно мне говорит ошибу, но я его не понимаю

Сообщение Lethargy » 04 фев 2018, 00:40

Да, у всех. Входит теперь в amxmod, давно ждал. Вы должны зарегистрироваться, чтобы видеть ссылки.

Скобку вернул на место, а что делать с этими ошибками?

Lawful evil ]:->

Были бы в языке pawn объекты, было бы круто. Почему нет объектов в павне?
Аватара пользователя
Lethargy
 
Сообщения: 179
Зарегистрирован: 12 мар 2017, 17:25
Благодарил (а): 34 раз.
Поблагодарили: 15 раз.
Языки программирования: За 3-4 часа любой язык

Re: Оно мне говорит ошибу, но я его не понимаю

Сообщение RevCrew » 04 фев 2018, 00:50

Lethargy, return вроде как строку напрямую не возращает.

Код: Выделить всё
socket_err_code2text(err) {
    new 
str[32];
/* здесь можешь сделать switch а в нем formatex(str) */
    
return str;


но лучше сделать так
Код: Выделить всё
 new str[32];
      
socket_err_code2text(g_last_errorstrcharsmax(str))
      
console_print(0"Соединенте с ТСР сервером не установлено: %s"str);
socket_err_code2text( const errstring[], len) {

    switch (
err)
    {
        default: 
formatex(stringlen"Error#1");
    }
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Оно мне говорит ошибу, но я его не понимаю

Сообщение MrJunior » 04 фев 2018, 00:53

Возврат строки - ужас, советую подобного избегать.
Вроде рабочий код:
Код: Выделить всё
stock socket_err_code2text(err)
{
    new string[30];
    switch(err)
    {
        case 1: string = "1 - Error while creating socket";
        case 2: string = "2 - Couldn't resolve hostname";
        case 3: string = "3 - Couldn't connect";
        case 0: string = "0 - No error";
        default: string = "? - Unknown error";
    }
    return string;
}
Аватара пользователя
MrJunior
Скриптер
 
Сообщения: 146
Зарегистрирован: 21 сен 2016, 19:46
Откуда: localhost
Благодарил (а): 3 раз.
Поблагодарили: 31 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn | Web | Lua

Re: Оно мне говорит ошибу, но я его не понимаю

Сообщение Lethargy » 04 фев 2018, 01:17

Как работать со строками понял.
А как мне потом удалить переменную err_text? Что бы память не потерялась.


Добавлено спустя 21 секунду:
MrJunior писал(а):Возврат строки - ужас, советую подобного избегать.
Вроде рабочий код:
Код: Выделить всё
stock socket_err_code2text(err)
{
    new string[30];
    switch(err)
    {
        case 1: string = "1 - Error while creating socket";
        case 2: string = "2 - Couldn't resolve hostname";
        case 3: string = "3 - Couldn't connect";
        case 0: string = "0 - No error";
        default: string = "? - Unknown error";
    }
    return string;
}
 

Говорят, что это плохой вариант : D

Добавлено спустя 1 минуту 57 секунд:
Или переменная сама удалится после выхода за область действия?
Lawful evil ]:->

Были бы в языке pawn объекты, было бы круто. Почему нет объектов в павне?
Аватара пользователя
Lethargy
 
Сообщения: 179
Зарегистрирован: 12 мар 2017, 17:25
Благодарил (а): 34 раз.
Поблагодарили: 15 раз.
Языки программирования: За 3-4 часа любой язык

Re: Оно мне говорит ошибу, но я его не понимаю

Сообщение MrJunior » 04 фев 2018, 02:21

Эта временная переменная, и появляется она, только тогда, когда вызывается функция, после окончания работы - из временного стэка удалится.

Возврат строки - и есть плохой вариант.

Самое главное: я бы думал о скорости выполнения скрипта, а не о том, сколько памяти он берёт. Ты свой сервер не на калькуляторе хостить собираешься.
Аватара пользователя
MrJunior
Скриптер
 
Сообщения: 146
Зарегистрирован: 21 сен 2016, 19:46
Откуда: localhost
Благодарил (а): 3 раз.
Поблагодарили: 31 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn | Web | Lua

Re: error 039: constant symbol has no size

Сообщение Lethargy » 05 фев 2018, 01:25

MrJunior, я знаю, что у pawn нету сборщика мусора, поэтому и думал, что раз мы создали строку, то её надо бы и удалить.
Lawful evil ]:->

Были бы в языке pawn объекты, было бы круто. Почему нет объектов в павне?
Аватара пользователя
Lethargy
 
Сообщения: 179
Зарегистрирован: 12 мар 2017, 17:25
Благодарил (а): 34 раз.
Поблагодарили: 15 раз.
Языки программирования: За 3-4 часа любой язык

Re: error 039: constant symbol has no size

Сообщение RevCrew » 05 фев 2018, 16:10

Lethargy, лучше сразу учиться делать нормально.

Код: Выделить всё

enum socketErr
{
    
SE_CREATE_SOCKET,
    
SE_RESOLVE_HOSTNAME,
    
SE_CONNECT
}
socket_err_code2text( const socketErr:errstring[], len) {

    switch (
err)
    {
        case 
SE_CREATE_SOCKETformatex(stringlen"Error while creating socket");
        case 
SE_RESOLVE_HOSTNAMEformatex(stringlen"Couldn't resolve hostname");
        default: 
formatex(stringlen"");
    }
}

new 
str[32];
socket_err_code2text(socketErr:g_last_errorstrcharsmax(str))
console_print(0"Соединенте с ТСР сервером не установлено: %s"str);
 
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13