2016-04-02 3 views
0

Привет, я только начинаю с 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. 

Теперь я понимаю, что доступ к частным переменным может получить только этот член класса, но домашняя работа просит меня использовать те же параметры, что и родительский класс, это то, что меня смущает, поэтому есть способ обойти это, я не мог действительно найти что-либо в Интернете, достаточно похожее на это задание.

+2

Точно так же местоположение ошибки находится где-то в коде, который вы отправили? Думаю, это не так. Если вы не видите строку с ошибкой, я бы предположил, что проблема заключается в том, что вы объявили конструктор 'Undergraduate' как private, но затем попытаетесь создать объект« Undergraduate »где-то в другом месте. –

+0

Сделать переменные 'protected', а не' private' – Chiel

+0

@Chiel: он не пытается получить доступ к закрытым переменным из базового класса, он вызывает публичный конструктор. –

ответ

0

С вашего Undergraduate(string f, string l, int grade, int edu): Student(f,l,grade,edu) конструктор является закрытым, как вы создаете экземпляр этого класса?

Смежные вопросы