循环依赖c意外错误或只是一个糟糕的设计

Circular Dependency c unexpected errors or just a bad design

本文关键字:一个 意外 依赖 错误 循环      更新时间:2023-10-16

我想做的是当一个对象进入一个新的类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;
};

请随时提出解决方案或新的设计,谢谢。

为什么不把所有的方法实现移动到单独的。cpp文件中,只保留头文件中的声明呢?那么B.h和A.h都可以包含在a.p p和b.p p