не может получить доступ к закрытому члену, объявленному в классе, при использовании защищенного и наследования - PullRequest
1 голос
/ 27 мая 2020

У меня проблема при использовании члена protected. Соответствующие коды и ошибка, которую я получаю, приведены ниже. В классах есть все необходимые функции и переменные. Я только что резюмировал соответствующие части. Что делать?

MFS.h:

class MFS
{
protected:
    MatrixXd commandedLateral;
};

CSimulator.h:

class CSimulator : MFS
{
};

CSimulator. cpp:

void CSimulator::calculateActuator(MFS* mfs)
{
    actuator = -gain * mfs->commandedLateral(1,0);
}

Ошибка C2248: 'MFS :: commandedLateral': невозможно получить доступ к закрытому члену, объявленному в классе 'MFS'

1 Ответ

1 голос
/ 27 мая 2020

protected члены могут быть доступны только через производный класс, то есть вы не можете получить к нему доступ через базовый класс MFS.

(выделено мной)

Защищенный член класса доступен только

1) членам и друзьям этого класса;

2) членам and friends (until C++17) любого производного класса этого класса, , но только когда класс объекта, через который осуществляется доступ к защищенному члену, является производным классом или производным классом этого производного класса :

Например, следующий код должен работать нормально.

void CSimulator::calculateActuator(CSimulator* mfs)
{
    actuator = -gain * mfs->commandedLateral(1,0);
}
...