Просмотр полной версии : [Вопрос] warning 219: Перечисления и локальные переменные
Pawn не перестает меня удивлять.
В следующем коде возникает неоднозначность
enum ePosition
{
x,
y,
z
}
main()
{
new x, y, z;
}
Можно ли как-то исправить это? А то использование этих переменных вызывает уже ошибки.
А вариант
enum ePosition
{
posx,
posy,
posz
}
Тоже самое, что и обращаться ко мне как к Bib Bib, не катит. Или по другом никак?
Я даже чаем подавился от столь удивительного вопроса...
Эмм, а что тебя удивляет? То, что ты одно имя резервируешь и локально, и глобально, а потом заставляешь Pawn каким-то образом определять к какому именно имени ты обращаешься? Это то же самое, что и если бы помимо тебя в семье было 10 детей и всех вас назвали "Петя", а потом мама каждый раз кричала: "Петя, подойди ко мне".
Почитай вот эту (http://pro-pawn.ru/showthread.php?8347-%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8-%D0%BF%D0%BE-%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8E-%D0%BA%D0%BE%D0%B4%D0%B0) тему. Всю. Целиком. И прислушайся хотя бы к большей части того, что там написано, ибо всё написанное придумано не просто так, а опыт и время показали, что это действительно удобнее и правильнее.
Я даже чаем подавился от столь удивительного вопроса...
Эмм, а что тебя удивляет? То, что ты одно имя резервируешь и локально, и глобально, а потом заставляешь Pawn каким-то образом определять к какому именно имени ты обращаешься? Это то же самое, что и если бы помимо тебя в семье было 10 детей и всех вас назвали "Петя", а потом мама каждый раз кричала: "Петя, подойди ко мне".
Почитай вот эту (http://pro-pawn.ru/showthread.php?8347-%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8-%D0%BF%D0%BE-%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8E-%D0%BA%D0%BE%D0%B4%D0%B0) тему. Всю. Целиком. И прислушайся хотя бы к большей части того, что там написано, ибо всё написанное придумано не просто так, а опыт и время показали, что это действительно удобнее и правильнее.
Проблема немного не в этом, а в том, что данный код выглядит так, что объявленные внутри блока ePosition элементы изолированны и могут использоваться только с ним. Но, к сожалению, в Pawn это не так, поэтому стоит смириться и использовать префиксы вида E_.
Просто enum выглядит как struct из C, поэтому это и вызывает подобные вопросы. Кстати, в Pawn 4.0 от этого синтаксиса избавились, думаю, что как-раз из-за подобных непоняток.
Daniel_Cortez
30.09.2017, 21:30
Кстати, в Pawn 4.0 от этого синтаксиса избавились, думаю, что как-раз из-за подобных непоняток.
Равно как и "избавились" от возможности указания инкремента для членов перечисления (пример (https://github.com/Open-GTO/sa-mp-fixes/blob/77467d6fabc4420cfeaa0939a57b2317ce7d6e74/fixes.inc#L2773)). Такое себе решение. -_-
Вообще, ИМХО, Pawn 4.0 - отнюдь не самый лучший пример для подражания, ибо там ещё много таких "улучшений". Например, чем можно оправдать замену разделителя для чисел со знака "_" на " ' " ? (т.е., к примеру, вместо "1_000_000_000" нужно писать "1'000'000'000" - при этом если в редакторе кода используется подсветка синтаксиса для C++, он буквально начинает сходить с ума, подсвечивая весь последующий код как незавершённую строку)
Что касается коллизии имён между членами перечисления и переменными, нужно просто с умом подходить к именованию первых. Например, к именам членов enum можно добавить префикс, который, в свою очередь, можно получить из названия enum.
Пример:
enum e_PlayerInfo // "Player Info" ==> "pi" или "p", как удобнее.
{
pID,
pLevel,
pMoney,
/* ... */
};
Спасибо всем. Буду так и делать
enum e_PlayerInfo // "Player Info" ==> "pi" или "p", как удобнее.
{
pID,
pLevel,
pMoney,
/* ... */
};
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot