-1

My code works normally up until the point that I add #include "CharacterBase.h" to a file called ItemBase.h. I am using #pragma once in all of my files, and I cannot figure out why when I add CharacterBase.h it suddenly is filled with errors. "Itembase" undeclared identifier, is the error.

//Filename is :ItemBase
#pragma once
 #include <string>
#include "CharacterBase.h"




 class ItemBase
 {

 }

//Filename is ItemConsumable 
   #pragma once
#include "ItemBase.h"

class ItemConsumable : public ItemBase
{
}

//File name is CharacterBase.h
 #pragma once
 #include <string>

#include "ItemBase.h"
#include "ItemConsumable.h"
#include <vector>

class CharacterBase
{
 public:
}
Strom
  • 93
  • 1
  • 10

1 Answers1

1

You just have a circular dependencie. In C++, if your file “CharacterBase.h” includes “ItemBase.h” then “ItemBase.h” cannot include “CharacterBase.h”. The only way for ItemBase to use CharacterBase is to forward declare CharacterBase, use pointers or references on CharacterBase in the header and finally include “CharacterBase.h” in “ItemBase.cpp”.

File ItemBase.h

//ItemBase.h
#pragma once
 #include <string>

//ItemBase.h
#include "CharacterBase.h"
 class ItemBase
 {
 }

File CharacterBase.h

//CharacterBase.h
 #pragma once
#include "ItemBase.h"

class ItemBase{} // Forward declaration

class CharacterBase
{
 public:
    CharacterBase(ItemBase *base);
    ItemBase *itemBase;
}

File CharacterBase.cpp

// CharacterBase.cpp
#include ItemBase.h
CharacterBase:CharacterBase(ItemBase *itemBase){// your stuff}
jdenozi
  • 212
  • 1
  • 11