1

I tried to inherit a base class (meter) with template to a derived class (kilometer) with same template. I get error when trying to access the base class protected member in derived class .

template <class Q>
class meter
{
protected:
    Q mtr;
public:
    meter();
    meter(Q m);
    virtual void convert() = 0;
};

template <class Q>
class kilometer : public meter<Q>
{
protected:
    Q km;
public:
    kilometer();
    kilometer(Q m);
    void convert();
    void print();
};

template <class Q>
meter<Q>::meter()
{
    mtr = 0;
}

template<class Q>
meter<Q>::meter(Q m){
    mtr = m;
}

template <class Q>
kilometer<Q>::kilometer(Q m): meter<Q>(m)
{
    km = 0;
    this->convert();
}

template <class Q>
void kilometer<Q>::convert()
{
    while ( mtr >= 1000){
        mtr -= 1000;
        km++;
    }
}

template <class Q>
void kilometer<Q>::print()
{
    cout << "kilometer : " << km << endl;
    cout << "meter : " << mtr << endl;
}

mtr is a data member of base class , but when i tried to access meter in derived class it shows "mtr not declared "

ERROR
error: ‘mtr’ was not declared in this scope; did you mean ‘meter’?
   28 |   while (mtr >= 1000){

help me to overcome this error, error comes during compliation time.

0 Answers0