Объявление двумерного массива с разными типами данных

Статус
В этой теме нельзя размещать новые ответы.

Nico Yazawa

Бывший MrChester =(
Сообщения
326
Реакции
303
И снова всех приветствую.
Сегодня было необходимо создать двумерный массив и вот что я смог сделать:
PHP:
any VIPList[][] =     {100, 864000, "VIP права на 10 дней"},
                    {200, 2592000, "VIP права на 1 месяц"},             // <--- Тут ошибка
                    {500, 7776000, "VIP права на 3 месяца"},
                    {700, 12960000, "VIP права на 5 месяцев"},
                    {1400, 31104000, "VIP права на 1 год"‬};
Но как понимаете компилятору это не по душе:
PHP:
//SourceMod Batch Compiler
// by the SourceMod Dev Team


//// maniac_core.sp
//
// maniac_core/donate.sp(6) : error 001: expected token: "-identifier-", but found "{"
//
// 1 Error.
//
// Compilation Time: 0,31 sec
// ----------------------------------------

Press enter to exit ...
Скажите пожалуйста, что я делаю не так, попробовал разные способы и этот с самым маленьким кол-вом ошибок.
 
Решение
Спасибо, может и придется к этому прибегнуть, подожду еще часа 3, если другого решения не будет, то это будет самым лучшим.
Мне нравится юзать enum struct [Если что, можно переписать этот же пример на старый синтаксис, но он будет, не удобным от слова совсем для такой задачи] - по этому, этот раз - не исключение, хоть и возможно, что решение покажется тебе большим.

C-подобный:
static const int g_iCells[][] =
{
    {100, 86400},
    {200, 2592000},
    {500, 7776000},
    {700, 12960000},
    {1400, 31104000}
};
static const char g_sDisplay[][] =
{
    "VIP права на 10 дней",
    "VIP права на 1 месяц",
    "VIP права на 3 месяца",
    "VIP права на 5 месяцев",
    "VIP права на 1 год"
}

enum struct VIPInfo
{
    int price;
    int...

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
  • Команда форума
  • #2
На сколько помню, нельзя одновременно разные типы задать. А у тебя именно так.
 

Rostu

Добрая душа
Сообщения
986
Реакции
623
Спасибо, может и придется к этому прибегнуть, подожду еще часа 3, если другого решения не будет, то это будет самым лучшим.
Мне нравится юзать enum struct [Если что, можно переписать этот же пример на старый синтаксис, но он будет, не удобным от слова совсем для такой задачи] - по этому, этот раз - не исключение, хоть и возможно, что решение покажется тебе большим.

C-подобный:
static const int g_iCells[][] =
{
    {100, 86400},
    {200, 2592000},
    {500, 7776000},
    {700, 12960000},
    {1400, 31104000}
};
static const char g_sDisplay[][] =
{
    "VIP права на 10 дней",
    "VIP права на 1 месяц",
    "VIP права на 3 месяца",
    "VIP права на 5 месяцев",
    "VIP права на 1 год"
}

enum struct VIPInfo
{
    int price;
    int time;
    char name[64];

    void Init(int price, int time, const char[] display)
    {
        this.price = price;
        this.time = time;
        strcopy(this.name, sizeof(VIPInfo::name), display);
    }
}

VIPInfo VIPList[sizeof(g_sDisplay)];
public void OnPluginStart()
{
    for(int x = 0; x < sizeof(g_sDisplay); x++) VIPList[x].Init(g_iCells[x][0], g_iCells[x][1], g_sDisplay[x]);

    // Пример вывода
    for(int x = 0; x < sizeof(g_sDisplay); x++) PrintToServer("Цена: %d Время: %d Название: %s", VIPList[x].price,VIPList[x].time, VIPList[x].name);
}

2020-02-19_20-53-45.png
 
Последнее редактирование:
Решение

Nico Yazawa

Бывший MrChester =(
Сообщения
326
Реакции
303
Мне нравится юзать enum struct [Если что, можно переписать этот же пример на старый синтаксис, но он будет, не удобным от слова совсем для такой задачи] - по этому, этот раз - не исключение, хоть и возможно, что решение покажется тебе большим.

C-подобный:
static const int g_iCells[][] =
{
    {100, 86400},
    {200, 2592000},
    {500, 7776000},
    {700, 12960000},
    {1400, 31104000}
};
static const char g_sDisplay[][] =
{
    "VIP права на 10 дней",
    "VIP права на 1 месяц",
    "VIP права на 3 месяца",
    "VIP права на 5 месяцев",
    "VIP права на 1 год"
}

enum struct VIPInfo
{
    int price;
    int time;
    char name[64];

    void Init(int price, int time, const char[] display)
    {
        this.price = price;
        this.time = time;
        strcopy(this.name, sizeof(VIPInfo::name), display);
    }
}

VIPInfo VIPList[sizeof(g_sDisplay)];
public void OnPluginStart()
{
    for(int x = 0; x < sizeof(g_sDisplay); x++) VIPList[x].Init(g_iCells[x][0], g_iCells[x][1], g_sDisplay[x]);

    // Пример вывода
    for(int x = 0; x < sizeof(g_sDisplay); x++) PrintToServer("Цена: %d Время: %d Название: %s", VIPList[x].price,VIPList[x].time, VIPList[x].name);
}

Посмотреть вложение 52605
Со структурами вот недавно научился работать, когда массивы выдавали варнинг на работу с enum. Я так понимаю вариантов больше нет, спасибо. Это будет лучшим решением.
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
И снова всех приветствую.
Сегодня было необходимо создать двумерный массив и вот что я смог сделать:
PHP:
any VIPList[][] =     {100, 864000, "VIP права на 10 дней"},
                    {200, 2592000, "VIP права на 1 месяц"},             // <--- Тут ошибка
                    {500, 7776000, "VIP права на 3 месяца"},
                    {700, 12960000, "VIP права на 5 месяцев"},
                    {1400, 31104000, "VIP права на 1 год"‬};
Но как понимаете компилятору это не по душе:
PHP:
//SourceMod Batch Compiler
// by the SourceMod Dev Team


//// maniac_core.sp
//
// maniac_core/donate.sp(6) : error 001: expected token: "-identifier-", but found "{"
//
// 1 Error.
//
// Compilation Time: 0,31 sec
// ----------------------------------------

Press enter to exit ...
Скажите пожалуйста, что я делаю не так, попробовал разные способы и этот с самым маленьким кол-вом ошибок.
Можно, если объявлять правильно:
Screenshot_20200219-150248_Samsung Internet.jpg

Код:
C-подобный:
any VIPList[][]={
    {100,864000,"VIP правана 10 дней"},
    {200,2592000,"VIP правана 1 месяц"},
    {500,7776000,"VIP правана 3 месяца"},
    {700,12960000,"VIP правана 5 месяцев"},
    {1400,31104000,"VIP права 1 год"},
};

public void OnPluginStart(){ 
    PrintToServer("%d %d %s", VIPList[1][0], VIPList[1][1], VIPList[1][2]);
}
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу