Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 5 из 5
  1. #1
    Аватар для Bib
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2017
    Адрес
    Челябинск
    Сообщений
    56
    Репутация:
    6 ±

    warning 219: Перечисления и локальные переменные

    Pawn не перестает меня удивлять.

    В следующем коде возникает неоднозначность
    PHP код:
    enum ePosition
    {
        
    x,
        
    y,
        
    z
    }

    main()
    {
        new 
    xyz;

    Можно ли как-то исправить это? А то использование этих переменных вызывает уже ошибки.

    А вариант
    PHP код:
    enum ePosition
    {
        
    posx,
        
    posy,
        
    posz

    Тоже самое, что и обращаться ко мне как к Bib Bib, не катит. Или по другом никак?

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Я даже чаем подавился от столь удивительного вопроса...

    Эмм, а что тебя удивляет? То, что ты одно имя резервируешь и локально, и глобально, а потом заставляешь Pawn каким-то образом определять к какому именно имени ты обращаешься? Это то же самое, что и если бы помимо тебя в семье было 10 детей и всех вас назвали "Петя", а потом мама каждый раз кричала: "Петя, подойди ко мне".

    Почитай вот эту тему. Всю. Целиком. И прислушайся хотя бы к большей части того, что там написано, ибо всё написанное придумано не просто так, а опыт и время показали, что это действительно удобнее и правильнее.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    Bib (05.10.2017)
  4. #3
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Я даже чаем подавился от столь удивительного вопроса...

    Эмм, а что тебя удивляет? То, что ты одно имя резервируешь и локально, и глобально, а потом заставляешь Pawn каким-то образом определять к какому именно имени ты обращаешься? Это то же самое, что и если бы помимо тебя в семье было 10 детей и всех вас назвали "Петя", а потом мама каждый раз кричала: "Петя, подойди ко мне".

    Почитай вот эту тему. Всю. Целиком. И прислушайся хотя бы к большей части того, что там написано, ибо всё написанное придумано не просто так, а опыт и время показали, что это действительно удобнее и правильнее.
    Проблема немного не в этом, а в том, что данный код выглядит так, что объявленные внутри блока ePosition элементы изолированны и могут использоваться только с ним. Но, к сожалению, в Pawn это не так, поэтому стоит смириться и использовать префиксы вида E_.

    Просто enum выглядит как struct из C, поэтому это и вызывает подобные вопросы. Кстати, в Pawn 4.0 от этого синтаксиса избавились, думаю, что как-раз из-за подобных непоняток.
    Последний раз редактировалось ziggi; 30.09.2017 в 14:26.

  5. 2 пользователя(ей) сказали cпасибо:
    Bib (05.10.2017) DeimoS (30.09.2017)
  6. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Кстати, в Pawn 4.0 от этого синтаксиса избавились, думаю, что как-раз из-за подобных непоняток.
    Равно как и "избавились" от возможности указания инкремента для членов перечисления (пример). Такое себе решение. -_-

    Вообще, ИМХО, Pawn 4.0 - отнюдь не самый лучший пример для подражания, ибо там ещё много таких "улучшений". Например, чем можно оправдать замену разделителя для чисел со знака "_" на " ' " ? (т.е., к примеру, вместо "1_000_000_000" нужно писать "1'000'000'000" - при этом если в редакторе кода используется подсветка синтаксиса для C++, он буквально начинает сходить с ума, подсвечивая весь последующий код как незавершённую строку)

    Что касается коллизии имён между членами перечисления и переменными, нужно просто с умом подходить к именованию первых. Например, к именам членов enum можно добавить префикс, который, в свою очередь, можно получить из названия enum.
    Пример:
    PHP код:
    enum e_PlayerInfo // "Player Info" ==> "pi" или "p", как удобнее.
    {
        
    pID,
        
    pLevel,
        
    pMoney,
        
    /* ... */
    }; 
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  7. 3 пользователя(ей) сказали cпасибо:
    Bib (05.10.2017) DeimoS (30.09.2017) SooBad (01.10.2017)
  8. #5
    Аватар для Bib
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2017
    Адрес
    Челябинск
    Сообщений
    56
    Репутация:
    6 ±
    Спасибо всем. Буду так и делать
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    PHP код:
    enum e_PlayerInfo // "Player Info" ==> "pi" или "p", как удобнее.
    {
        
    pID,
        
    pLevel,
        
    pMoney,
        
    /* ... */
    }; 

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •