[英]Can't access protected class member in a derived class
錯誤是:
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
的實例CourseActivity
給函數Lecture::Lecture
。 即使CourseActivity
確實是Lecture
的基類,即使您正在操作的對象是派生類型,也無法從外部訪問受保護的類成員(例如_oActivity.duration
)。
為避免出現特定問題,可以在基類中創建此構造函數
CourseActivity::CourseActivity(const CourseActivity &_oActivity)
並用
Lecture::Lecture(const CourseActivity& _oActivity, const std::string& _topic)
: CourseActivity(_oActivity)
在派生類中。 然后,在基類中,您可以訪問受保護的成員,而不是在派生類中(不允許這樣做)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.