错误是:
的受保护成员
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 :(得分:1)
您正在将CourseActivity
的实例传递给函数Lecture::Lecture
。即使CourseActivity
确实是Lecture
的基类,即使您正在操作的对象是派生类型,也无法从外部访问受保护的类成员(如_oActivity.duration
)
为避免出现特殊问题,您可以在基类
中创建此构造函数CourseActivity::CourseActivity(const CourseActivity &_oActivity)
并用
调用它Lecture::Lecture(const CourseActivity& _oActivity, const std::string& _topic)
: CourseActivity(_oActivity)
在派生类中。在基类中,您可以访问受保护的成员,而不是在派生类中,这是不允许的。