Я собираюсь перейти на C ++ über n00b и спросить, как лучше всего справиться с циклической зависимостью, когда у вас есть наследование.
Набор прост: класс сцены расширяет Actor;Сцена имеет указатель на вектор актеров;У актера есть указатель на (родительскую) сцену.
Что касается включаемых файлов, которые я получил:
Scene.h:
#include <string>
#include <vector>
using namespace std;
#ifndef __Scene_h__
#define __Scene_h__
#include "Actor.h"
namespace myns
{
// class Actor;
class Scene;
}
namespace myns
{
class Scene: public myns::Actor
{
/* private class attributes... */
public:
/* public class attributes... */
std::vector<myns::Actor*> actors;
Scene(/* arguments */);
/* public class methods... */
};
}
#endif
Actor.h
#include <string>
#include <vector>
using namespace std;
#ifndef __Actor_h__
#define __Actor_h__
#include "Scene.h"
namespace myns
{
// class Scene;
class Actor;
}
namespace myns
{
class Actor
{
/* private class attributes... */
public:
/* public class attributes... */
myns::Scene* scene;
Actor();
Actor(/* arguments */);
/* public class methods... */
};
}
#endif
Но это дает мне много ошибок C2504 / базовый класс не определен в Visual Studio 2010.
Если я прокомментирую включение Scene.h в Actor.h и раскомментирую предварительное объявление Scene в Actor.h это работает, но затем, в моем приложении, если я хочу включить только Actor.h в определенный фрагмент кода, это не будет работать.Как я могу заставить это работать, сохраняя независимость включения для Actor.h - включая Actor.h без необходимости предварительно вручную включать Scene.h?
Что не так с моими определениями классов и как лучшеспособ справиться с этой циклической зависимостью?
Разве директивы #ifndef не должны предотвращать эту проблему включения?
Заранее спасибо.