• ### Announcements

#### Archived

This topic is now archived and is closed to further replies.

## Recommended Posts

I have two classes ''Character'' and ''Item''. Character needs to be able to use Item instances and Item needs to use Character instances so I included the item header in the character header and vice versa. But when I do this theres some conflict and errors pop up. What am I doing wrong?

##### Share on other sites
It''s called circular definitions. You have two problems: the first is that the headers are dependent on each other and therefore recursively include each other (resulting in a parse bomb). Replace one (or both) of the inclusions with a forward declaration like so:
class Item; class Character{  ...  Item item;  ...};

Your second problem is that since each class contains the other, the classes are never closed. ie, Character contains an Item, which contains a Character, which contains an Item, which contains a Character... What you want to do instead is to use pointers, like so:
class Item; class Character{  ...  Item * pItem;  ...}; class Item{  ...  Character * pCharacter;  ...};

Hope that helped.

[ GDNet Start Here | GDNet Search Tool | GDNet FAQ ]
[ MS RTFM [MSDN] | SGI STL Docs | Boost ]
Thanks to Kylotan for the idea!

##### Share on other sites
If they're classes , you might want to use the 'friend' keyword, instead of including them in different header files. Example:

    #ifndef HEADER1#define HEADER1class Items;class Character{private:blah;public:friend Items;blah;}Items{private:blah;public:blah;}

What does it take to be a good game programmer?
---
Good insight,
good knowledge,
and of course,
big money deposits!

[edited by - Wachar on May 6, 2002 7:06:45 PM]

##### Share on other sites
Is my example an incorrect/unfunctioning example?

• ### Forum Statistics

• Total Topics
627711
• Total Posts
2978744

• 21
• 14
• 12
• 36
• 30