Круговая зависимость c неожиданными ошибками или просто плохим дизайном

то, что я хочу сделать, это когда объект входит в новый класс K, он должен завершить (удалить из списков) все K (дочерние B и D), в которых он находится, но я получаю эту ошибку, просто не могу понять это.
на самом деле есть больший список, в котором перечислены классы K s, но я не могу добраться до него по ссылке (ну, я могу, но много работы не в этом дело), ​​и проект должен быть циклически зависимым

//class A.h
#include some_other_header_circularly_dependent_on_class_B
class B
class A{
public:
string getname(){return name;};

void setWhere(K *a){whereami=a;};

void exit(){
if(whereami!=NULL)
(whereami)->exit(name);//error C2227: left of '->exit' must point to class/struct/union/generic type
};

private:
K* whereami;
string name;
};

//class B.h
#include "A.h"class K{
//abstract functions
}
class B:public class K{
public:
void enter(A* a){
a->exit();
alist.push_front(a);
a->setWhere(this);
};
void exit(string a){
for(auto it=alist.begin();it!=alist.end();)
if ((*it)->getname()==a)
alist.erase(it);
else it++;
};
private:
list<A*> alist;
};

не стесняйтесь предлагать решения или новые проекты, спасибо.

1

Решение

Почему бы не переместить все реализации методов в отдельные файлы .cpp и хранить только объявления в заголовках?
Тогда и B.h, и A.h могут быть включены в A.cpp и B.cpp.

0

Другие решения

Других решений пока нет …