1

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

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

4

1 回答 1

0

为什么不将所有方法实现移动到单独的 .cpp 文件中并仅在标头中保留声明?那么 Bh 和 Ah 都可以包含在 A.cpp 和 B.cpp 中

于 2012-12-28T17:45:15.567 回答