Привет, я только начинаю с C++, и мне интересно, почему я получаю эту ошибку: C2248: Бакалавриат: Бакалавриат не может получить доступ к частной переменной в классе «Бакалавриат».Наследование и частные переменные C++
Вот мой student.h класс, который наследует от Бакалавриат
#ifndef _STUDENT_H_
#define _STUDENT_H_
#include <string>
using namespace std;
class Student {
private:
// private local variables
string fname, lname;
int grade;
int edu;
public:
Student(string f, string l, int grade, int edu); // constructor
string getFirstName(); // accessor
string getLastName(); // accessor
int getGrade(); // accessor
int getEdu(); // accessor
// Q1: Friend Function Change Grade
// Declare a friend function named changeGrade which takes 2 parameters and has no return value.
// The first parameter is a pointer to a Student, and the second is an integer.
// See the helper function in hw09.cpp for proper use of this function.
friend void changeGrade(Student *s, int newGrade){}
virtual void displayInfo(){ }
};
#endif // _STUDENT_H_
Student.cpp
#include "Student.h"
Student::Student(string f, string l, int g, int e) {
fname = f;
lname = l;
grade = g;
edu = e;
}
string Student::getFirstName() { // accessor implimentation
return fname;
}
string Student::getLastName() {
return lname;
}
int Student::getGrade() {
return grade;
}
int Student::getEdu() {
return edu;
}
и, наконец, Undergraduate.h
// Q2a : Create Undergraduate Class
// Create a child class of the Student class named 'Undergraduate'
// See the add function in hw09.cpp for proper use of this function.
class Undergraduate : public Student{
private:
Undergraduate(string f, string l, int grade, int edu): Student(f,l,grade,edu){
}
virtual void displayInfo(){ }
};
// Declare constructor which accepts the same 4 parameters as the parent class Student.
// Pass the 4 parameters to the super constructor in the Student class.
Теперь я понимаю, что доступ к частным переменным может получить только этот член класса, но домашняя работа просит меня использовать те же параметры, что и родительский класс, это то, что меня смущает, поэтому есть способ обойти это, я не мог действительно найти что-либо в Интернете, достаточно похожее на это задание.
Точно так же местоположение ошибки находится где-то в коде, который вы отправили? Думаю, это не так. Если вы не видите строку с ошибкой, я бы предположил, что проблема заключается в том, что вы объявили конструктор 'Undergraduate' как private, но затем попытаетесь создать объект« Undergraduate »где-то в другом месте. –
Сделать переменные 'protected', а не' private' – Chiel
@Chiel: он не пытается получить доступ к закрытым переменным из базового класса, он вызывает публичный конструктор. –