Выход за границы массива при вводе первого значения

После ввода первого значения мне выдает ошибку: выход за границы массива, в чем проблема? И по возможности, скажите какие ошибки еще я допустил

#include <iostream>
#include <vector>
#include <windows.h>
using namespace std;
struct  Footballist
{
    char firstname;
    char secondname;
    char birthday;
    char yellowCards;
    char role;
    char BallsInGate;
};
class functions {
public:
    void PlusStroka(vector<Footballist> a, const int b, int i) {
        char temp;
            cout << "Введите имя игрока: " << endl;
            cin >> temp;
            a[i].firstname = temp;
            cout << "Введите фамилию: " << endl;
            cin >> temp;
            a[i].secondname = temp;
            cout << "Введите год рождения: " << endl;
            cin >> temp;
            a[i].birthday = temp;
            cout << "Введите количество желтых карточек " << endl;
            cin >> temp;
            a[i].yellowCards = temp;
            cout << "Введите роль: " << endl;
            cin >> temp;
            a[i].role = temp;
            cout << "Введите количество забитых мячей: " << endl;
            cin >> temp;
            a[i].BallsInGate = temp;
        
    }
    
};
    
int main()
{  
    setlocale(LC_ALL, "ru");
    int Contunius = 0;
    const int stroki=1;
    vector<Footballist> Foot[stroki];

    functions f1;
    for (int i = 0; i < stroki; i++) {
        f1.PlusStroka(Foot[i], stroki, i);
    }
    
  

}

Ответы (1 шт):

Автор решения: Harry
vector<Footballist> Foot[stroki];

Это - массив пустых векторов.

Вы передаете его элементы, т.е. отдельные пустые вектора, в

f1.PlusStroka(Foot[i], ...

что, конечно, совершенно бессмысленно, так как передача по значению, создавая копию, никак не влияет на исходный вектор. Тем не менее

void PlusStroka(vector<Footballist> a, const int b, int i) {
    char temp;
    cout << "Введите имя игрока: " << endl;
    cin >> temp;
    a[i].firstname = temp;

Вектор a пустой, в нем нет ничего. А вы пытаетесь писать в какой-то его элемент — которых нет ни одного! — какие-то данные. Запись в несуществующий элемент и есть — выход за границы...

Еще? Ну, например, вы уверены, что имя игрока (и прочие данные) - это одна буква?

char firstname;

P.S. Только не спрашивайте, "а что делать?" — учиться. Читать учебники. Правильно использовать возможности С++.

Пишу это потому, что явно видно, что передача два раза i в

f1.PlusStroka(Foot[i], stroki, i);

это была именно такая "затычка", без понимания, что делается и зачем, просто в стиле "если не работает так, то попробовать вот так - может, компилятор пропустит?..."

→ Ссылка