Ошибки:
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)
в производном классе. В базовом классе вы можете получить доступ к защищенным членам, в отличие от производного класса, где это запрещено.
Других решений пока нет …