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";
}
}
}