Выход за границы массива при вводе первого значения
После ввода первого значения мне выдает ошибку: выход за границы массива, в чем проблема? И по возможности, скажите какие ошибки еще я допустил
#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 шт):
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);
это была именно такая "затычка", без понимания, что делается и зачем, просто в стиле "если не работает так, то попробовать вот так - может, компилятор пропустит?..."