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

标签 c++ circular-dependency

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

相关文章:

ios - Xcode 10 框架依赖循环与自身

python - ImportError 出现在 py.test 中,但在运行应用程序时不会出现

javascript - 如何解决 Require.js 中的循环依赖?

c++ - 字符串不能开始参数声明

c++ - 如何让用户只输入一个字符?

c++ - 这是 C++ 中的聚合初始化还是默认初始化?

angular - ng build 有效,但不适用于 --prod

c++ - 打破工厂模式中的循环依赖

c++ - memory_order_relaxed 有哪些用例

php - 使用C++加速PHP