Форум программистов, компьютерный форум CyberForum.ru

Как правильно передать массив объектов пользовательского типа в функцию? - C++

Восстановить пароль Регистрация
 
Blood Red Rose
0 / 0 / 0
Регистрация: 02.04.2016
Сообщений: 56
01.09.2016, 07:05     Как правильно передать массив объектов пользовательского типа в функцию? #1
Доброго всем, пишу впервые пишу огромную программу - игру и столкнулся с проблемой, которую так сам и не могу решить. Нужно передать массив структур в функцию. Выдает ошибку "error: no match for 'operator[]'. Выглядит условно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//Имеется структура
struct PLAYER
{
    char name[8];
    int recordscore;
};
 
int main()
{
  PLAYER player; //текущий игрок, допустим имя/счет заданы
  PLAYER LOADED[5]; //массив структур, хранит 5 предыдущих лучших рекордов + имена игроков, которые загружаются из файла
  Checking(player, LOADED);//тут возможно что то перед LOADED должно быть?
}
void Checking(struct PLAYER player, struct PLAYER LOADED) //функция для проверки нового рекорда от текущего игрока
{
        for(char i = 0; i < 6; i++)
        {
            if(player.recordscore > LOADED[i].recordscore) //тут я пробовал ставить -> по разному, не помогает
            {
                LOADED[i].name = player.name;
                LOADED[i].recordscore = player.recordscore;
            }
        }
}
Помогите разобраться
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2016, 07:05     Как правильно передать массив объектов пользовательского типа в функцию?
Посмотрите здесь:

C++ Реализовать поиск в массиве объектов пользовательского типа по заданному полю (структуры)
C++ Нюансы работы с массивами: как правильно передать массив в функцию в качестве аргумента?
Массив объектов пользовательского типа в vector C++
C++ Передача в функцию динамический массив объектов первого и второго типа
C++ Как правильно передать объект fstream в функцию
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Usagi
 Аватар для Usagi
0 / 0 / 2
Регистрация: 03.07.2016
Сообщений: 13
Завершенные тесты: 2
01.09.2016, 07:54     Как правильно передать массив объектов пользовательского типа в функцию? #2
Передавайте в функцию ссылку на структуру. Массив через указатель, а размер массив отдельным параметром.
C++
1
void Checking(PLAYER & player, PLAYER * LOADED, int i)
Добавлено через 12 минут
Еще заметил, что функция содержимое player не меняет.Если player в функции меняться не будет, то лучше к первому параметру добавить квалификатор const.
Blood Red Rose
0 / 0 / 0
Регистрация: 02.04.2016
Сообщений: 56
01.09.2016, 08:10  [ТС]     Как правильно передать массив объектов пользовательского типа в функцию? #3
теперь пишет ошибку "invalid array assigment"
zss
Модератор
Эксперт С++
 Аватар для zss
5946 / 5551 / 1784
Регистрация: 18.12.2011
Сообщений: 14,178
Завершенные тесты: 1
01.09.2016, 08:20     Как правильно передать массив объектов пользовательского типа в функцию? #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <cstring>
 
using namespace std;
 
struct PLAYER
{
    char name[8];
    int recordscore;
};
void Checking(const PLAYER& player, PLAYER* LOADED,int n); 
int main()
{
    PLAYER player={"Ivanov",3}; //текущий игрок, допустим имя/счет заданы
    PLAYER LOADED[5]={{"Ivanov",3},{"Petrov",3},{"Sidorov",3},{"Ivanov",4},{"Ivanov",2}};
    Checking(player, LOADED,5);
    return 0;
}
void Checking(const PLAYER& player, PLAYER* LOADED,int n) //функция для проверки нового рекорда от текущего игрока
{
    for(char i = 0; i < n; i++)
    {
        if(player.recordscore > LOADED[i].recordscore)
        {
            strcpy(LOADED[i].name,player.name);
            LOADED[i].recordscore = player.recordscore;
        }
    }
}
gru74ik
Модератор
 Аватар для gru74ik
3118 / 1344 / 167
Регистрация: 20.02.2013
Сообщений: 3,810
Записей в блоге: 17
01.09.2016, 08:28     Как правильно передать массив объектов пользовательского типа в функцию? #5
Blood Red Rose, вместо массива чаров используйте std::string:
C++
1
2
3
4
5
struct Player
{
    std::string name_;
    int recordscore_;
};
Вместо массива структур используйте std::vector:
C++
1
std::vector <Player> loaded_players;
В функцию при таком раскладе достаточно передать ссылку на вектор, параметризованный типом Player, и текущего игрока:
C++
1
void checking(std::vector <Player> & loaded_players, Player & current_player);
Blood Red Rose
0 / 0 / 0
Регистрация: 02.04.2016
Сообщений: 56
01.09.2016, 08:46  [ТС]     Как правильно передать массив объектов пользовательского типа в функцию? #6
Благодарю, так заработало
Yandex
Объявления
01.09.2016, 08:46     Как правильно передать массив объектов пользовательского типа в функцию?
Ответ Создать тему

Метки
массив, структура, указатель, функции
Опции темы

Текущее время: 00:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru