Viktor K
Viktor K

Reputation: 2173

Forward declaration of derived class

I have some code like that:

class Class1 {
    // some code here

    Class2 inverse() {
        // some code here
    }
};

class Class2 : public Class1 {
    // some code here
};

And I got an error that Class2 is unknown in function inverse. Can I declare that class and how?

Upvotes: 1

Views: 1801

Answers (2)

stardust
stardust

Reputation: 5988

Class2 is not defined when you reach Class2 inverse() so even forward declaring would not completely solve that issue. However you can do two things. Either return a pointer or a reference to Class2

class Class2;
^^^^^^^^^^^^
class Class1 {    
    Class2& inverse() {
    //   ^^^ or possibly Class2*
       // 
    }
};

class Class2: public Class1 {
}

Or defined inverse after Class2 have been completely defined

class Class2;
class Class1 {
   Class2 inverse(); 
};

class Class2: public Class1 {
   // 
}

Class2 Class1::inverse() {
    // 
}

I would go with the second option if possible.

Upvotes: 0

Lol4t0
Lol4t0

Reputation: 12547

You can forward declare Class2 before Class1. And then you'll have to separate your inverse function declaration from definition. So you should define its after Class2 is defined:

class Class2;
class Class1 {
// some code here

Class2 inverse();
};

class Class2: public Class1 {
// some code here
};

Class2 Class1::inverse()
{
    return Class2();
}

But, honestly, it is bad design.

Upvotes: 2

Related Questions