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 に答える