inheritance - C++: Why does my DerivedClass's constructor not have access to the BaseClass's protected field? -
i have constructor attempting initialize field in base class. compiler complains. field protected, derived classes should have access.
//the base class: class baseclass { public: baseclass(std::string); baseclass(const baseclass& orig); virtual ~baseclass(); const std::string getdata() const; void setdata(const std::string& data); protected: baseclass(); std::string m_data; }; baseclass::baseclass(const std::string data) : m_data(data) { } baseclass::baseclass() { } baseclass::baseclass(const baseclass& orig) { } baseclass::~baseclass() { } void baseclass::setdata(const std::string& data) { m_data = data; } const std::string baseclass::getdata() const { return m_data; } //the derived class: class derivedclass : public baseclass { public: derivedclass(std::string data); derivedclass(const derivedclass& orig); virtual ~derivedclass(); private: }; derivedclass::derivedclass(std::string data) : m_data(data) { } //error here derivedclass::derivedclass(const derivedclass& orig) { } derivedclass::~derivedclass() { }
//the compiler error
derivedclass.cpp:3: error: class ‘derivedclass’ not have field named ‘m_data’
any appreciated. thank in advance.
you cannot initialize m_data in derived class constructor instead pass argument base class constructor.
that is: derivedclass::derivedclass(std::string data) : baseclass(data) { }
Comments
Post a Comment