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

Popular posts from this blog

c++ - How do I get a multi line tooltip in MFC -

asp.net - In javascript how to find the height and width -

c# - DataTable to EnumerableRowCollection -