簡體   English   中英

無法訪問派生類中受保護的類成員

[英]Can't access protected class member in a derived class

錯誤是:

d_start是一個受保護的成員CourseActivity
durationCourseActivity的受保護成員
locationCourseActivity的受保護成員

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM