Home > other >  how to pass an array through to another function? c
how to pass an array through to another function? c

Time:01-26

so i am making a program that takes student data as objects and prints it, i am trying to store the data as an array so each student is a element in the array, i am having issues with printing the data though as i cannot pass the array into the print function, can anyone help? when i try and compile i get "studentarray: arrays of references are illegal". sorry if this is a stupid question i am new to coding, thankyou!


#include <iostream>
#include <cmath>
#include <string>
#include <iomanip>
#include <fstream>
#include <cstdlib>

using namespace std;

class student {
public:
    int studentarray[10];
    string studentname;
    string studentemail;
    long studentnumber;
    int grade1, grade2, grade3, grade4, totalgrade;
    float percentage1, percentage2, percentage3, percentage4, totalpercentage;
    int loop;
    int i;

public:
    void enterstudent()
    {
        student studentarray[10]; //array of objects creation
        int i;

        cout << "Enter number of students: ";
        cin >> i;

        for (loop = 0; loop < i; loop  ) {
            cout << "Enter details of student " << loop   1 << ":\n";
            studentarray[loop].inputstudentdetails();
        }

        cout << endl;
    }
    void printstudent(student& studentarray[10])
    {
        int i;
        for (loop = 0; loop < i; loop  ) {
            cout << "Details of student " << (loop   1) << ":\n";
            studentarray[loop].printstudentdetails();
        }
    }

    void inputstudentdetails()
    {
        cout << "Enter Student name: ";
        cin >> studentname;
        cout << "Enter student number: ";
        cin >> studentnumber;
        cout << "Enter student email: ";
        cin >> studentemail;
        cout << "Enter grade for test1: ";
        cin >> grade1;
        cout << "Enter grade for test2: ";
        cin >> grade2;
        cout << "Enter grade for test3: ";
        cin >> grade3;
        cout << "Enter grade for test4: ";
        cin >> grade4;

        percentage1 = (float)grade1 / 100 * 100;
        percentage2 = (float)grade2 / 100 * 100;
        percentage3 = (float)grade3 / 100 * 100;
        percentage4 = (float)grade4 / 100 * 100;
        totalpercentage = grade1   grade2   grade3   grade4;
    }

    void printstudentdetails()
    {
        cout << "Student name:" << studentname << "\nStudent Number:" << studentnumber << "\nStudent email: " << studentemail << "\ngrade1:" << grade1 << "\ngrade2 : " << grade2 << "\ngrade3 : " << grade3 << "\ngrade4 : " << grade4 << "\ntotal" << totalpercentage << "out of 400" << endl;
    }
};

int main()
{

    student studentobj;
    int select;
    cout << "      MENU" << endl;
    cout << "___________________";
    cout << "\n1: enter student details" << endl;
    cout << "3: Exit Application" << endl;
    cin >> select;

    if (select == 1) {
        student enterstudent();
    }
    if (select == 2) {
        student printstudent(student & studentarray);
    }

    if (select == 2) {
    }

    if (select == 3) {
        exit(1);
    }
    main();

    return 0;
}

CodePudding user response:

You wrote student printstudent(student & studentarray); which looks more like a deceleration than a function call.

I'm guessing you wanted to write printstudent(studentarray)?

Your error is caused by declaring printstudent(student& studentarray[10]) , which declares the function argument to be an array of 10 student& i.e. references to students, which the c standard forbids:

There shall be no references to references, no arrays of references, and no pointers to references.

Some more details on why can be found here: Why are arrays of references illegal?

CodePudding user response:

After a bit of refactoring and fixing bugs, here it is:

#include <iostream>
#include <iomanip>
#include <string>
#include <vector>


class Student
{
public:
    std::string name;
    std::string email;
    std::string number;
    int grade1, grade2, grade3, grade4, totalGrade;
    float percentage1, percentage2, percentage3, percentage4, totalPercentage;

public:
    static void addStudent( std::vector<Student>& students )
    {
        std::cout << "\nEnter the number of students: ";
        std::size_t count { };
        std::cin >> count;

        std::cout << '\n';

        for ( std::size_t idx { }; idx < count;   idx )
        {
            std::cout << "Enter the details of student #" << idx   1 << ":\n";
            students.resize( students.size( )   1 );
            students.back( ).inputStudentDetails( );
            std::cout << '\n';
        }

        std::cout << '\n';
    }


    void inputStudentDetails( )
    {
        std::cout << "Enter Student name: ";
        std::cin >> name;
        std::cout << "Enter student number: ";
        std::cin >> number;
        std::cout << "Enter student email: ";
        std::cin >> email;
        std::cout << "Enter grade for test1: ";
        std::cin >> grade1;
        std::cout << "Enter grade for test2: ";
        std::cin >> grade2;
        std::cout << "Enter grade for test3: ";
        std::cin >> grade3;
        std::cout << "Enter grade for test4: ";
        std::cin >> grade4;

        percentage1 = static_cast<float>( grade1 );
        percentage2 = static_cast<float>( grade2 );
        percentage3 = static_cast<float>( grade3 );
        percentage4 = static_cast<float>( grade4 );
        totalPercentage = percentage1   percentage2   percentage3   percentage4;
    }

    void printStudentDetails( ) const
    {
        std::cout << "Student Name: " << name << "\nStudent Number: " << number
                  << "\nStudent email: " << email << "\ngrade1: " << grade1
                  << "\ngrade2: " << grade2 << "\ngrade3: " << grade3
                  << "\ngrade4: " << grade4 << "\ntotal " << totalPercentage << " out of 400\n";
    }

    static void printAllStudentsDetails( const std::vector<Student>& students )
    {
        std::size_t idx { };

        for ( const Student& stud : students )
        {
            std::cout << "\nDetails of student #" <<   idx << ":\n";
            stud.printStudentDetails( );
            std::cout << std::setfill( '-' ) << std::setw( 28 ) << '\n';
        }
    }
};


int main( )
{
    std::vector<Student> students;

    while ( true )
    {
        std::cout << "\t\tMENU\n" << std::setfill( '_' ) << std::setw( 36 ) << "\n\n";
        std::cout << "1: Enter student details\n";
        std::cout << "2: Display all students' details\n";
        std::cout << "3: Exit the Application\n";
        char select { };
        std::cin >> select;

        switch ( select )
        {
            case '1' : Student::addStudent( students ); break;
            case '2' : Student::printAllStudentsDetails( students ); break;
            case '3' : return 0;
            default : std::cout << "Invalid Input!\n";
        }
    }
}
  •  Tags:  
  • Related