In caso ho due metodi - uno pubblico, uno protetto che restituiscono il riferimento alla stessa membro, vengo seguenti errore di compilazione:C++ come creare funzioni di accesso pubblici e protetti a stesso membro
'Server::getManager': cannot access protected member declared in class 'Server'
Quando io commento funzione protetta, il codice funziona. Potresti per favore avvisare perché questo sta accadendo? Perché il compilatore non riesce a trovare la funzione pubblica per lo stesso membro?
class Manager
{
};
class Server
{
public:
const Manager & getManager() const { return m_man; }
protected:
Manager & getManager() { return m_man; } // <-- after removing this method I get no compilation error
private:
Manager m_man;
};
int main()
{
Server s;
const Manager& m = s.getManager();
return 0;
}
Il compilatore trova quello pubblico, ma quello protetto è una corrispondenza migliore. Corrisponde esattamente. – chris
Perché dovresti aver bisogno di quello protetto se quello pubblico restituisce la stessa cosa? – wizzardmr42
Gli specificatori di accesso vengono valutati dopo la risoluzione di sovraccarico. Quindi il compilatore prima trova la migliore corrispondenza e * quindi * controlla se è accessibile. Suggerisco di rinominare semplicemente il membro protetto, poiché ovviamente si intende utilizzarlo in un contesto diverso. – StoryTeller