2012-05-05 63 views
2

我有這個問題符號「A」不能在文件中了Bh解決,我使用的Eclipse IDE的C/C++開發人員:符號「A」無法解析

//B.h file 

#ifndef __B_H__ 
#define __B_H__ 

#include "A.h" 



class B: public cs::A{ 

}; 

#endif 

,其中包括阿文件:

//A.h file 

#ifndef A_H_ 
#define A_H_ 
namespace cs{ 
class A { 


}; 
} 

#endif 

我在這裏錯過了什麼?

回答

3
class B: public cs::A{ }; 
       ^^^^^^ 

您需要提供A類的全限定名稱。

請注意,A類是在名稱空間cs內定義的,因此不能只使用A而沒有名稱空間限定。

+0

它不能解決問題,符號「A」無法解析! – nabil

5

你放在一個命名空間中的類A,你應該保持命名空間分辨率,而使用它:

class B: public cs::A{ 

}; 

還是不建議這

//B.h file 

#ifndef __B_H__ 
#define __B_H__ 

#include "A.h" 

using namespace cs; 

class B: public A{ 

}; 

#endif 

(檢查ALS的評論)。

你也可以這樣做是爲了避免雙方保持整個命名空間限定每次使用A時間(你應該在第一個解決方案做),並using所有的命名空間:

//B.h file 

#ifndef __B_H__ 
#define __B_H__ 

#include "A.h" 

using cs::A; 

class B: public A{ 

}; 

#endif 
+3

'使用命名空間cs;'絕對是一種矯枉過正,尤其應該避免在頭文件中。它將在包含頭文件的每個翻譯單元中的名稱空間'cs'中導入所有符號。 –

+0

@Als:我同意你的看法,這就是爲什麼我說我不推薦它。然而,我設法查看它,然後不推薦它通知有關的不良:) –

+0

我添加了'使用命名空間cs;'並且我得到了符號'cs'無法解析,當我使用'class B:public cs :: A {};'我得到了'符號'A'無法解析「?! – nabil

0

您正在使用的命名空間cs,記得在聲明B類時再次使用它。

//B.h file 

#ifndef __B_H__ 
#define __B_H__ 

#include "A.h" 


class B: public cs::A{ 

}; 

#endif