PDA

Просмотр полной версии : [Вопрос] Почему так работает?



underwoker
25.07.2014, 02:30
Доброго времени суток! Делал систему кое-чего с использованием чекпоинтов стримера координаты которых хранились в таком массиве

enum partinfo
{
Float:PartPos[3]
}

new PartInfo[][partinfo] =
{
{1301.3738, -1301.1459, 18.8723},
{1301.3729, -1295.5941, 18.8703},
{1306.6167, -1301.1685, 18.8723},
{1306.6167, -1295.5470, 18.8703},
{1310.9929, -1300.9169, 18.8723},
{1310.9919, -1295.5013, 18.8703},
{1316.5524, -1300.8939, 18.8723},
{1316.5524, -1295.4950, 18.8703}
};
И мне выдавало ошибки указывая на первую строчку координат в массиве:

C:\Users\\Desktop\Ìîä\\gamemodes\.pwn(441) : warning 227: more initiallers than enum fields
C:\Users\\Desktop\Ìîä\\gamemodes\.pwn(441) : warning 213: tag mismatch
C:\Users\\Desktop\Ìîä\\gamemodes\.pwn(441) : warning 227: more initiallers than enum fields
C:\Users\\Desktop\Ìîä\\gamemodes\.pwn(441) : warning 213: tag mismatch
C:\Users\\Desktop\Ìîä\\gamemodes\.pwn(441) : error 018: initialization data exceeds declared size

Поискав в гугле, я даже не нашел варнинга 227 в списке всех ошибок и варнингов Pawn. Везде, хоть таких мест было мало, советовали сделать из

enum partinfo
{
Float:PartPos[3]
}

enum partinfo
{
Float:PartPosX,
Float:PartPosY,
Float:PartPosZ
}

Так и правда, все начинало работать. Но я не мог с этим смириться, и решил добиться чего хотел. Методом проб и ошибок вышло так


enum partinfo
{
Float:PartPos[3]
}

new PartInfo[][partinfo] =
{
{{1301.3738, -1301.1459, 18.8723},},
{{1301.3729, -1295.5941, 18.8703},},
{{1306.6167, -1301.1685, 18.8723},},
{{1306.6167, -1295.5470, 18.8703},},
{{1310.9929, -1300.9169, 18.8723},},
{{1310.9919, -1295.5013, 18.8703},},
{{1316.5524, -1300.8939, 18.8723},},
{{1316.5524, -1295.4950, 18.8703}}
};
А главное - все работало и не выдавало варнингов и ошибок.

Собсна вопрос: ПОЧЕМУ? :pardon:

L0ndl3m
25.07.2014, 12:11
enum partinfo
{
Float: PartPos_X,
Float: PartPos_Y,
Float: PartPos_Z
}

new PartInfo[][partinfo] =
{
{1301.3738, -1301.1459, 18.8723},
{1301.3729, -1295.5941, 18.8703},
{1306.6167, -1301.1685, 18.8723},
{1306.6167, -1295.5470, 18.8703},
{1310.9929, -1300.9169, 18.8723},
{1310.9919, -1295.5013, 18.8703},
{1316.5524, -1300.8939, 18.8723},
{1316.5524, -1295.4950, 18.8703}
};


Есть только так. Как вы собрались в одной ячейке массива использовать сразу 3 переменных?

И да, так как здесь ничего особенного в массиве нет, то есть здесь присутствует только вещественный тип лучше сделать напрямую без энумератора ( если вам удобнее так - используйте так ).


new Float: PartInfo[][] =
{
{1301.3738, -1301.1459, 18.8723},
{1301.3729, -1295.5941, 18.8703},
{1306.6167, -1301.1685, 18.8723},
{1306.6167, -1295.5470, 18.8703},
{1310.9929, -1300.9169, 18.8723},
{1310.9919, -1295.5013, 18.8703},
{1316.5524, -1300.8939, 18.8723},
{1316.5524, -1295.4950, 18.8703}
};