2012-04-11 116 views
3

在A.hpp文件I具有這樣的結構,其具有B級的指針循環依賴與向前聲明錯誤

struct state 
{ 
    B *b; 
}; 

在A.hpp文件,我添加了一個向前聲明和我包括B.hpp文件在文件A.cpp

//A.hpp 
class B 

在B.hpp文件,一個函數使用狀態,宣佈在A.hpp爲對函數的參數。

bool function_in_b(state *s) 

我還添加A的前向聲明在B.hpp文件和我添加A,A.hpp的報頭文件中B.cpp文件。

//B.hpp 
class A 

所有頭文件都有一個頭文件。 如果我嘗試編譯,它不會在A.hpp中找到'state'聲明。 因此,它不會找到匹配的功能,並抱怨在考生

bool function_in_b(int *) 

我該如何解決這個問題?

在此先感謝

+0

哪個文件是你想,當你的錯誤編譯? – Beta 2012-04-11 21:16:53

回答

2

B.hpp,你說你前置聲明A,但不state - 所以當它第一次看到function_in_b(state *s)它不知道什麼state是。當您將A.hpp包含在B.cpp中時,就太遲了。您需要轉發申報B.hppstate,即

struct state; 

bool function_in_b(state *s); 
+1

謝謝!有效! – codereviewanskquestions 2012-04-11 21:28:09

1

在B.hpp文件中,function_in_b(state *)的聲明之前,向前聲明state類型:

struct state;