Проблема с выводом элементов массива

Логика программы :
Мы создаем вектор зачеток длины lenght, потом записываем все данные зачеток с помощью метода setvalue который присваивает введенные данные полям элемента массива, но после всего этого при выводе элементов выводятся только какие-то двоеточия и ничего больше.
Код:

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

class Studentrecordbook
{
protected:
    string firstname;
    string secondname;
    string middlename;

public:

    void setValues
    (
        string secondname ,
        string firstname, 
        string middlename 
    )

    {
        this->secondname = secondname;
        this->firstname = firstname;
        this->middlename = middlename;

    }

    void WriteText()
    {
        cout << this->secondname << " " << this->firstname << " " << this->middlename << ":\n\n";
    }

    auto Change
    (
        string change_secondname,
        string change_firstname,
        string change_middlename
    )

    {
        this->secondname = change_secondname;
        this->firstname = change_firstname;
        this->middlename = change_middlename;

    }

};

class Group : public Studentrecordbook
{
private:
    vector<Studentrecordbook> students;
public:

    void ShowStudents()
    {
        for (int i = 0; i < students.size(); i++)
            students[i].WriteText();
    }

    void Addstudents(int lenght)
    {
        for (int i = 0; i < lenght; i++)
        {
            Studentrecordbook somestudent;
            somestudent.setValues(secondname, firstname, middlename);
            students.push_back(somestudent);
        }
    }

    void Searchstudents(string searchsecondname , string searchfirstname , string searchmiddlename)
    {
        for (int i = 0; i < students.size(); i++)
        {
            if ((searchsecondname == secondname) && (searchfirstname == firstname) && (searchmiddlename == middlename))
            {
                students[i].WriteText();
                break;
            }
            else
                cout << "Идет поиск" << endl;
        }

    }


};


int main()
{
    setlocale(LC_ALL, "Rus");
    int lenght = 1;
    string secondname;
    string firstname;
    string middlename;
    Group student;
    cout << "Сколько зачеток хотите создать?" << endl;
    cin >> lenght;
    for (int i = 0; i < lenght; i++)
    {
        cout << "Введите Фамилию" << endl;
        cin >> secondname;
        cout << "Введите Имя" << endl;
        cin >> firstname;
        cout << "Введите Отчество" << endl;
        cin >> middlename;
        student.Addstudents(lenght);
    }
    student.ShowStudents();

    return 0;
}



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

Автор решения: Максим Бончев

Ваши переменные firstname, secondname и т.д в функции int mane() создаются в ней, и в ней же и пропадают. Эти переменные не переходят между функциями, т.к они локальные. Их нужно объявить глобальными на уровне namespace, либо просто передать их в функцию. А еще у вас не правильно реализовано добавление студентов. Вам не надо добавлять их в цикле, и в функции сново делать цикл, а просто в цикле вызывать функцию:

   #include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;

class Studentrecordbook
{
protected:
    string firstname;
    string secondname;
    string middlename;

public:

    void setValues
    (
        string secondname,
        string firstname,
        string middlename
    )

    {
        this->secondname = secondname;
        this->firstname = firstname;
        this->middlename = middlename;

    }

    void WriteText()
    {
        cout << this->secondname << " " << this->firstname << " " << this->middlename << ":\n\n";
    }

    auto Change
    (
        string change_secondname,
        string change_firstname,
        string change_middlename
    )

    {
        this->secondname = change_secondname;
        this->firstname = change_firstname;
        this->middlename = change_middlename;

    }

};

class Group : public Studentrecordbook
{
private:
    vector<Studentrecordbook> students;
public:

    void ShowStudents()
    {
        for (int i = 0; i < students.size(); i++)
            students[i].WriteText();
    }

    void Addstudents( string firstname , string secondname, string middlename)
    {

            Studentrecordbook somestudent;
            somestudent.setValues(secondname, firstname, middlename);
            students.push_back(somestudent);
    }

    void Searchstudents(string searchsecondname, string searchfirstname, string searchmiddlename)
    {
        for (int i = 0; i < students.size(); i++)
        {
            if ((searchsecondname == secondname) && (searchfirstname == firstname) && (searchmiddlename == middlename))
            {
                students[i].WriteText();
                break;
            }
            else
                cout << "Идет поиск" << endl;
        }

    }


};


int main()
{
    setlocale(LC_ALL, "Rus");
    int lenght = 1;
    string secondname;
    string firstname;
    string middlename;
    Group student;
    cout << "Сколько зачеток хотите создать?" << endl;
    cin >> lenght;
    for (int i = 0; i < lenght; i++)
    {

        cout << "Введите Фамилию" << endl;
        cin >> secondname;
        cout << "Введите Имя" << endl;
        cin >> firstname;
        cout << "Введите Отчество" << endl;
        cin >> middlename;
        student.Addstudents(firstname, secondname, middlename);
    }
    student.ShowStudents();
    //system("pause");
    return 0;
}
→ Ссылка