Domanda

Ho una classe base, diciamo BassClass , con alcuni campi che li ho resi protetti e alcune funzioni virtuali pure. Quindi la classe derivata, dire DerivedClass , come class DerivedClass: public BassClass . DerivedClass non dovrebbe ereditare i campi protetti da BassClass? Quando ho provato a compilare DerivedClass, il compilatore si lamenta che DerivedClass NON ha nessuno di quei campi, cosa c'è di sbagliato qui? grazie

È stato utile?

Soluzione

Se BassClass (sic) e DerivedClass sono modelli e il membro BassClass a cui si desidera accedere da DerivedClass non è specificato come nome dipendente, non sarà visibile.

per es.

template <typename T> class BaseClass {
protected: 
    int value;
};

template <typename T> class DerivedClass : public BaseClass<T> {
public:
    int get_value() {return value;} // ERROR: value is not a dependent name
};

Per ottenere l'accesso è necessario fornire ulteriori informazioni. Ad esempio, potresti specificare completamente il nome del membro:

    int get_value() {return BaseClass<T>::value;}

O potresti rendere esplicito che ti riferisci a un membro della classe:

    int get_value() {return this->value;}

Altri suggerimenti

Funziona:

#include <iostream>

struct Base {
virtual void print () const = 0;
protected:
int val;
};

struct Derived : Base {
void print () { std::cout << "Bases's val: " << val << std::endl; }
};
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top