Megaxela
Megaxela

Reputation: 97

C++ Class inheritance "expected class-name" error

My previous question was asked wrong, so I'll post it fixed.
I have this example throwing
expected class-name before ‘{’ token
error while compiling. I am understanding why is it fails, but I don't know how to fix it. Thank you.
BaseClass.h

#ifndef INHERITTEST_BASECLASS_H
#define INHERITTEST_BASECLASS_H

#include "ElementClass.h"

class ElementClass;

class BaseClass
{

private:
    ElementClass *m_someField;
};


#endif


ElementClass.h

#ifndef INHERITTEST_ELEMENTCLASS_H
#define INHERITTEST_ELEMENTCLASS_H

#include "ChildClass.h"

class ChildClass;

class ElementClass
{
private:
    ChildClass *m_class;
};


#endif


ChildClass.h

#ifndef INHERITTEST_CHILDCLASS_H
#define INHERITTEST_CHILDCLASS_H

#include "BaseClass.h"

class ChildClass : public BaseClass
{

};


#endif

Upvotes: 0

Views: 1834

Answers (2)

suroh
suroh

Reputation: 917

When you're working with inheritance the following

#include "ChildClass.h"
class ChildClass;

is unnecessary, if you're going to break these into sepperate source files (which it looks like you are) you can say

#include "ElementClass.h"

in the source file of your derived class

Upvotes: 0

R Sahu
R Sahu

Reputation: 206737

You have circulary dependent .h files.

In BaseClass.h:

#ifndef INHERITTEST_BASECLASS_H
#define INHERITTEST_BASECLASS_H

#include "ElementClass.h"  // Includes ElementClass.h

In ElementClass.h:

#ifndef INHERITTEST_ELEMENTCLASS_H
#define INHERITTEST_ELEMENTCLASS_H

#include "ChildClass.h"   // Which included BaseClass.h

You can remove those #include lines since you are using those classes by pointers only and a forward declaration is sufficient for that purpose.

Upvotes: 2

Related Questions