2013-01-23 80 views
3

是否合法/建議做這在C++C++在一個文件中定義類和轉發聲明它在另一個

//Interface.h 
#ifndef INTERFACE_H 
#define INTERFACE_H 
    #include "WinImplementation.h" 
    #include "NixImplementation.h" 
    class Interface { 
     class WinImplementation; 
     class NixImplementation; 
    } 
#endif 

//WinImplementation.h 
#ifndef WINIMPLEMENTATION_H 
#define WINIMPLEMENTATION_H 
    #include "Interface.h" 
    class Interface::WinImplementation {} 
#endif 

//NixImplementation.h 
#ifndef NIXIMPLEMENTATION_H 
#define NIXIMPLEMENTATION_H 
    #include "Interface.h" 
    class Interface::NixImplementation {} 
#endif 
+0

這是否可以工作取決於你如何使用包括得分後衛很多('的#ifdef ...') – jogojapan

+0

哎呀.. 。那些。我現在將它們放入 – Eliezer

+0

[this]的可能重複(http://stackoverflow.com/questions/1021793/how-do-i-forward-declare-an-inner-class)? – Simon

回答

1

是的,你可以轉發用C聲明嵌套類++。下面的例子是直接取自C++標準(第9.7.3節):

class E 
{ 
    class I1;  // forward declaration of nested class 
    class I2; 
    class I1 {}; // definition of nested class 
}; 
class E::I2 {}; // definition of nested class 
+0

謝謝:-)現在,如果我想要'class E :: I2 {};'在一個單獨的文件中,我將如何處理遞歸包括? – Eliezer

+1

你可以用一個前向聲明來聲明一個指向你的嵌套類的指針。您可以在Interface.h的底部包含正確的實現頭文件,而不在實現頭文件中包含Interface.h。 – 2013-01-23 09:34:17

相關問題