私がやりたいのは、オブジェクトが新しいクラスKに入るとき、それが入っているすべてのK(子BとD)を終了(リストから削除)する必要がありますが、このエラーが発生してわかりません。実際には、クラス K をリストするより大きなリストがありますが、参照によってそれに到達することはできません (まあ、できますが、多くの作業がポイントではありません)。プロジェクトは循環的に依存する必要があります
//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;
};
解決策や新しいデザインをお気軽に提案してください。