Не удается получить доступ к защищенному члену класса в производном классе

Ошибки:

d_start является защищенным членом CourseActivity
duration является защищенным членом CourseActivity
location является защищенным членом CourseActivity

class CourseActivity{

protected:
StartTime* d_start;
double duration;
std::string location;

public:
CourseActivity() = default;
CourseActivity(const StartTime* _start, double _duration,
const std::string_location);
void reschedule(StartTime* _newStart);
void print() const;

};class Lecture: public CourseActivity{
std::string topic;
bool deflt = false; //indicate which constructor was used.
//false = 1st. true = 2nd

public:
Lecture(const StartTime* _start, double _duration,
const std::string location, const std::string& _topic);
Lecture(const CourseActivity& _oActivity, const std::string& topic );
void print();
};

// ERROR
Lecture::Lecture(const CourseActivity& _oActivity, const std::string& _topic)
: CourseActivity(_oActivity.d_start,_oActivity.duration,_oActivity.location){
topic = _topic;
deflt = true;
}
// ERROR

0

Решение

Вы передаете экземпляр CourseActivity к функции Lecture::Lecture, Даже в то время как CourseActivity действительно является базовым классом Lecture, вы не можете получить доступ к защищенным членам класса извне (например, _oActivity.duration), даже если объект, с которым вы работаете, имеет производный тип.

Чтобы избежать ваших особых проблем, вы можете создать этот конструктор в базовом классе

CourseActivity::CourseActivity(const CourseActivity &_oActivity)

и позвони с

Lecture::Lecture(const CourseActivity& _oActivity, const std::string& _topic)
: CourseActivity(_oActivity)

в производном классе. В базовом классе вы можете получить доступ к защищенным членам, в отличие от производного класса, где это запрещено.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]