Форвардные объявления C ++ с несколькими классами, производный класс - PullRequest
0 голосов
/ 20 февраля 2020

В настоящее время у меня есть 3 класса, настроенных так:

World.h

include "WorldObject.h"
class WorldObject;
class TextObject; // when this is added, compiles fine, but tobj is incomplete when accessed 
//(world->tobj->function()).  if #include "TextObject.h" is added, numerous errors occur within TextObject.h
class World { 
public:
      WorldObject* wobj; // works fine
      TextObject* tobj; //trying to get this to be functional
};

WorldObject.h

#include "World.h"
class World;
class WorldObject {
public:
      WorldObject(World* world){...} // works fine, world can be accessed from world objects
};

TextObject.h

#include "WorldObject.h"
#include "World.h"
class TextObject : WorldObject {
public:
      TextObject(World* world) : WorldObject(w){...};
};

Как я могу использовать предварительное объявление, чтобы tobj был доступен из World.h, как и obj, без ошибок? Я также использую #pragma один раз в начале каждого класса. Я пытался добавить «класс World» в TextObject.h и «класс TextObject» в World.h, но ни одна из, казалось бы, стандартных процедур не работает. Есть предложения?

1 Ответ

2 голосов
/ 20 февраля 2020

#include <WorldObject.h> в вашем .cpp файле, а не в вашем заголовке, и вы можете получить к нему доступ оттуда.

Ваш заголовок включает в себя циклические зависимости, которых вы избегаете с помощью прямых объявлений.

...