0

错误是:

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 
4

1 回答 1

1

您正在将一个实例传递CourseActivity给函数Lecture::Lecture。即使CourseActivity确实是 的基类Lecture,您也无法从外部访问受保护的类成员(例如_oActivity.duration),即使您正在操作的对象是派生类型。

为避免您的特定问题,您可以在基类中创建此构造函数

CourseActivity::CourseActivity(const CourseActivity &_oActivity)

并调用它

Lecture::Lecture(const CourseActivity& _oActivity, const std::string& _topic)
    : CourseActivity(_oActivity)

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

于 2013-10-14T00:18:24.707 回答