无法访问派生类中的受保护类成员

时间:2013-10-14 00:02:15

标签: c++ inheritance protected access-specifier

错误是:

  

d_startCourseActivity的受保护成员   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 

1 个答案:

答案 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)

在派生类中。在基类中,您可以访问受保护的成员,而不是在派生类中,这是不允许的。