我想做的是当一个对象进入一个新的类 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;
};
欢迎提出解决方案或新设计,谢谢。
最佳答案
为什么不将所有方法实现移动到单独的 .cpp 文件中并只保留 header 中的声明? 那么B.h和A.h都可以包含在A.cpp和B.cpp中
关于c++ - 循环依赖 c 意外错误或只是糟糕的设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14073417/