Я получаю эту ошибку в наследстве (C++) ниже:наследования C++ защищенного
B.cpp:11:9: error: 'isMember' is a protected member of 'A'
if(x->isMember())
Я видел, что объявленный защищенный член в классе «матерей» достижим из аа элемента из «дочка». Но я все еще не понимаю, в чем проблема. Вот определение в моих двух классах А и Б:
#ifndef _A_H_
#define _A_H_
class A
{
private:
bool _member;
public:
A();
virtual ~A();
protected:
bool isMember();
};
#endif // _A_H_
//A.cpp
#include "A.h"
A::A(){_member=true;}
A::~A(){};
bool A::isMember()
{
return _member;
}
//B.h
#ifndef _B_H_
#define _B_H_
#include "A.h"
class B : public A
{
private:
A * _memberB;
public:
B(A *x);
~B();
};
#endif // _B_H_
//B.cpp
#include "B.h"
#include "A.h"
B::B(A * x)
{
if(x->isMember()) // call of the protected member of class A
this->_memberB=x;
}
B::~B()
{
//cout<<"B--"<<endl;
delete this->_memberB;
}
//main.cpp
#include "B.h"
int main()
{
A * a= new A();
B * b= new B(a);
return 0;
}
Потому что вы пытаетесь получить доступ к методу из объекта 'A'. Iirc, protected означает, что подкласс может использовать член внутри себя, но он не может получить доступ к члену родителя; только его собственный. – Carcigenicate
да, но почему объект родительского класса не может вызвать свой метод в подклассе. Это то, что я не понимаю – Anass
Внутри класса B вы можете вызвать isMember для объектов B. Вы не можете вызвать isMember для объектов A изнутри B. Это именно то, что защищено. – Carcigenicate