Search code examples
c++forward-declarationradixderived

forward declaring with inheritance information


This compiles fine, although I wouldn't want to try running it just yet. However ...

//class base;
//class derived;
//class derived : public base;

class base {};
class derived : public base {};

class other
{
    public:
        void func() {base1 = derived1;}
        base* base1;
        derived* derived1;
};

void main()
{
}

... moving the class other to above the definition of base and derived for which there is a similar thing I must do in a program of myne causes compile errors.

The obvious solution is to forward declare base and derived shown commented out at the top of the code, however this causes a can't convert between base* and derived* error. Attempting to forward declare including the inheritance information dosn't work either.


Solution

  • This should work. You need to move other up

    BUT declare func below. That way func is able to "see" that derived is of type base.

    e.g.,

    class base;
    class derived;
    //class derived : public base;
    
    class other
    {
        public:
            void func();
            base* base1;
            derived* derived1;
    };
    
    class base {};
    class derived : public base {};
    
    void other::func() { base1 = derived1; }