Ссылочный вектор вызывает ошибку при запуске программы - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь создать программу, которая будет принимать пользовательский ввод для создания нескольких форм.Я застрял при попытке получить вектор (который будет заполнен объектами класса формы, который создает пользователь) для использования в других функциях.Когда я использую оператор адреса (&), он выдает мне эту ошибку, когда программа позволяет пользователю вводить данные в объекты. Это снимок экрана программы и ошибка.

#include "pch.h"
#include <iostream>
#include <string>
#include <vector>

using namespace std;


class Form {
    public:
        string Fname;
        string Lname;
        string City;
        string Street;
        string State;
        string ZipCode;

};




void menuMain();
void menu1st(vector<Form> &Fvect);

void menu1st(vector<Form> &Fvect)
{
    int MainM;
    int n;

    cout << "NEW FORM(s)" << endl;
    cout << "Enter the number of forms you would like to make (Maximum of 5): "; cin >> n; cout << endl;
    for (int i = 0; i < n; i++)
    {
        cout << "First Name: "; cin >> Fvect[i].Fname; cout << endl;
        cout << "Last Name: "; cin >> Fvect[i].Lname; cout << endl;
        cout << "City: "; cin >> Fvect[i].City; cout << endl;
        cout << "Street: "; cin >> Fvect[i].Street; cout << endl;
        cout << "State: "; cin >> Fvect[i].State; cout << endl;
        cout << "Zip Code: "; cin >> Fvect[i].ZipCode; cout << endl;
    }

    cout << "Enter 1 to go back to main: "; cin >> MainM;
    if (MainM == 1)
    {
        menuMain();
    }
    else
    {
        cout << "Error not a correct input." << endl;
    }
}

void menu2nd()
{
    int MainM;
    //int Fnum;

    vector<Form> Fvect;
    cout << "EDIT A FORM" << endl;
    cout << Fvect[1].Fname;
    cout << "Enter the ";
    cout << "Enter 1 to go back to main: "; cin >> MainM;

    if (MainM == 1)
    {
        menuMain();
    }
    else
    {
        cout << "Error not a correct input." << endl;
    }

}

void menuMain()
{

    int Pnum;


    cout << "INFORMATION FORMATTING PROGRAM" << endl;
    cout << "1. Create new form's." << endl;
    cout << "2. Edit a form." << endl;
    cout << "3. Print forms." << endl;
    cout << "4. Erase a form." << endl;
    cout << "5. Exit Program." << endl;
    cout << "Enter the action you want to take (1-5): "; cin >> Pnum;

    vector<Form> Fvect;

    if (Pnum == 1)
    {
        menu1st(Fvect);
    }
    if (Pnum == 2)
    {
        menu2nd();
    }
    else
    {
        cout << "Error not a correct input." << endl;
    }
}

int main()
{

    menuMain();

}

1 Ответ

0 голосов
/ 02 декабря 2018

Вы обращаетесь к Fvect, используя недопустимый индекс в следующих строках:

    cout << "First Name: "; cin >> Fvect[i].Fname; cout << endl;
    cout << "Last Name: "; cin >> Fvect[i].Lname; cout << endl;
    cout << "City: "; cin >> Fvect[i].City; cout << endl;
    cout << "Street: "; cin >> Fvect[i].Street; cout << endl;
    cout << "State: "; cin >> Fvect[i].State; cout << endl;
    cout << "Zip Code: "; cin >> Fvect[i].ZipCode; cout << endl;

Следовательно, ваша программа имеет неопределенное поведение.

Вам необходимо иметь элементы в std::vector прежде чем вы сможете получить доступ к элементу из него, используя синтаксис массива.Вам нужно сделать следующее:

  1. Считать данные в объект типа Form.
  2. Добавить объект в std::vector.

Замените эти строки на:

Form form;

cout << "First Name: "; cin >> form.Fname; cout << endl;
cout << "Last Name: "; cin >> form.Lname; cout << endl;
cout << "City: "; cin >> form.City; cout << endl;
cout << "Street: "; cin >> form.Street; cout << endl;
cout << "State: "; cin >> form.State; cout << endl;
cout << "Zip Code: "; cin >> form.ZipCode; cout << endl;

Fvect.push_back(form);

PS

Я не уверен, почему у вас в этих строках cout << endl;.Вы не нуждаетесь в них.Будет достаточно использовать:

cout << "First Name: "; cin >> form.Fname;
cout << "Last Name: "; cin >> form.Lname;
cout << "City: "; cin >> form.City;
cout << "Street: "; cin >> form.Street;
cout << "State: "; cin >> form.State;
cout << "Zip Code: "; cin >> form.ZipCode;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...