2012-12-28 60 views
1

我想要做的是當一個對象進入一個新的類K它必須退出(從列表中刪除)所有的K(子B和D)它是但我得到這個錯誤只是不知道。 居然沒有列出K類個大名單,但我不能引用到它(那麼我可以,但很多工作不是點)和項目必須是循環依賴循環依賴c意外錯誤或只是一個糟糕的設計

//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; 
}; 

隨時提供解決方案或新設計,謝謝。

回答

0

爲什麼不移動所有的方法實現來分離.cpp文件並且只保留頭文件中的聲明? 然後Bh和Ah都可以包含在A.cpp和B.cpp中

+0

這是一個小組項目,我幾乎是一個人做的,我正在考慮給其他人提供那部分評論,但如果它我將解決我的問題我也會這樣做 – meh

+0

這是一個事實,它是一個與設計有關的團體項目和你問的問題? –

+0

好吧,它很容易編寫只是頭文件,而設計整個事情很容易編寫和修復,而沒有人正在幫助反正這固定我的問題,謝謝我沒有確定,直到我紅色http://stackoverflow.com/questions/5363542/複雜的圓形依賴性 – meh