1

私がやりたいのは、オブジェクトが新しいクラス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;
};

解決策や新しいデザインをお気軽に提案してください。

4

1 に答える 1

0

すべてのメソッドの実装を別の .cpp ファイルに移動し、宣言のみをヘッダーに保持しないのはなぜですか? 次に、Bh と Ah の両方を A.cpp と B.cpp に含めることができます。

于 2012-12-28T17:45:15.567 に答える