2017-08-05 134 views
-2

把这个扔在那里首先我还在学习如何在学校编程。我有一个问题阅读到一个指向我的一个类的指针动态创建的数组。函数readClassArray()没有从student.getCreditNumber返回变量。该程序在Visual Studio中符合要求,但是当我得到readClassArray时,它只是跳过该函数,因为s.getCreditNumber返回0.感谢提供任何帮助。从类C++动态创建一个数组

#ifndef STUDENT_H 
#define STUDENT_H 
#include <iostream> 
using namespace std; 

class Courses{ 
private: 
    int courseNumber; 
    double hours; 
    string courseName; 
    char grade; 
public: 
void setCourseNumber(int n){courseNumber = n; } 
void setCreditHours(double c) { hours = c; } 
void setCourseName(string n) { courseName = n; } 
void setGrade(char g) { grade = g; } 
int getCourseNumber() { return courseNumber; } 
double getCreditHours() { return hours; } 
string getCourseName() { return courseName; } 
char getGrade() { return grade; } 
}; 
class Student : public Courses{ 
private: 
    string firstName; 
    string lastName; 
    string studentNumber; 
    int creditNumber; 
    double gpa; 
public: 
Courses * courses; 
    Student() { 
    firstName = " "; 
    lastName = " "; 
    studentNumber = " "; 
    creditNumber = 0; 
    gpa = 0.0; 
    courses = NULL; 
} 
~Student() { 
    delete[] courses; 
}; 
void setFirstName(string n) { firstName = n; } 
void setLastName(string l) { lastName = l; } 
void setStudentNumber(string a) { studentNumber = a; } 
void setCreditNumber(int num) { creditNumber = num; } 
string getFirstName() { return firstName; } 
string getLastName() { return lastName; } 
string getStudentNumber() { return studentNumber; } 
int getCreditNumber() { return creditNumber; } 
}; 
#endif 

Student.cpp

#include "Student.h" 
#include <iostream> 
#include <string> 

using namespace std; 

void readStudent(); 
void readCourseArray(); 
void computeGPA(); 
void printSummary(); 

void readStudent() { 
Student a; 
string number; 
string firstName; 
string lastName; 
int courses; 

cout << "Enter student number: "; 
cin >> number; 
a.setStudentNumber(number); 
cout << "Enter student first name: "; 
cin >> firstName; 
a.setFirstName(firstName); 
cout << "Enter student last name: "; 
cin >> lastName; 
a.setLastName(lastName); 
cout << "Enter student number of courses: "; 
cin >> courses; 
a.setCreditNumber(courses); 

cout << "\n"; } 


void readCourseArray(){ 
Student s; 
s.courses = new Courses[s.getCreditNumber()]; 

int num; 
double cHours; 
string cName; 
char grade; 
cout << "test" << endl; 
for (int i = 0; i < s.getCreditNumber(); i++){ 
    cout << "Enter class " << i + 1 << " number: "; 
    cin >> num; 
    s.courses[i].setCourseNumber(num); 
    cout << "Enter class " << i + 1 << " name: "; 
    cin >> cName; 
    s.courses[i].setCourseName(cName); 
    cout << "Enter class " << i + 1 << " hours: "; 
    cin >> cHours; 
    s.courses[i].setCreditHours(cHours); 
    cout << "Enter class " << i + 1 << " grade: "; 
    cin >> grade; 
    s.courses[i].setGrade(grade); 
    cout << "\n"; 
} 
} 
+0

不要使用new [],请使用std :: vector。 – 2017-08-05 16:31:44

+0

readCourseArray创建一个本地对象s,该对象在函数结束时被销毁。这似乎是无用的。 – 2017-08-05 16:33:16

+0

非主题:请阅读[成员初始值列表](http://en.cppreference.com/w/cpp/language/initializer_list)。它在这里没有什么帮助,但它非常有用,它看起来并不像任何人向你展示的那样。 – user4581301

回答

0

在您创建sreadCourseArray开始。发生这种情况时,creditNumber成员的值为0,如默认构造函数所设置的那样。您需要做一些事情来将其设置为非零值。如果您希望在readStudent中设置的值继续存在,则需要将这两个函数组合在一起。或者传递一个Student对象作为每个函数的参考,或者readStudent返回一个Student对象并将其传递给readCourseArray