Ошибки:
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
Вы передаете экземпляр CourseActivity
для функции Lecture::Lecture
. Даже несмотря на то, что CourseActivity
действительно является базовым классом Lecture
, вы не можете получить доступ к защищенным членам класса извне (например, _oActivity.duration
), даже если объект, на котором вы работаете, имеет производный тип.
Чтобы избежать конкретных проблем, вы можете создать этот конструктор в базовом классе
CourseActivity::CourseActivity(const CourseActivity &_oActivity)
и назовите его
Lecture::Lecture(const CourseActivity& _oActivity, const std::string& _topic)
: CourseActivity(_oActivity)
в производном классе. В базовом классе вы можете получить доступ к защищенным членам, а не к производному классу, где это запрещено.
const CourseActivity&
? Это даже не допускается при передаче по значению._oActivity.duration
вы_oActivity.duration
доступ к классуCourseActivity
извне, что означает, что к защищенным или закрытым членам нельзя получить доступ. Неважно, где в коде это находится, это может быть даже внутри одного класса.