所以我正在制作一個程式,將學生資料作為物件并列印它,我試圖將資料存盤為一個陣列,所以每個學生都是陣列中的一個元素,我在列印資料時遇到了問題,盡管我無法通過陣列進入列印功能,有人可以幫忙嗎?當我嘗試編譯時,我得到“studentarray:參考陣列是非法的”。抱歉,如果這是一個愚蠢的問題,我是編碼新手,謝謝!
#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;
}
uj5u.com熱心網友回復:
經過一些重構和修復錯誤,這里是:
#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";
}
}
}
uj5u.com熱心網友回復:
你寫student printstudent(student & studentarray);的看起來更像是減速而不是函式呼叫。
我猜你想寫printstudent(studentarray)?
您的錯誤是由宣告引起的printstudent(student& studentarray[10]),它將函式引數宣告為 10 個陣列,student&即對學生的參考,這是 c 標準禁止的:
There shall be no references to references, no arrays of references, and no pointers to references.
關于為什么可以在這里找到更多詳細資訊:為什么參考陣列是非法的?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/421212.html
標籤:
下一篇:從檔案C 中的選定行讀取數字
