2015-12-21 70 views
1

我有一個由嵌套枚舉創建的循環依賴。由於enum類嵌套的C++循環依賴

class A 
{ 
    enum class A_enum {}; 

    void method_which_uses_class_B() {} 
} 

class B 
{ 
    void method_which_uses_A_enum() {} 
} 

這給你一個整體結構的想法。

具體來說,我有這樣定義的枚舉類:

... file containing class A 

class A 
{ 
    enum class A_enum 
    { 
     ITEM_A, ITEM_B 
    }; 

    // then the rest of A goes here 
} 

// in my main code file 

#include "class B file" 
#include "class A file" 

... code 

因此,該解決方案將是移動的枚舉類出class A並把代碼/文件/包括在正確的順序,以防止問題。

但是爲了達到我的目的,將enum類嵌套在class A內相當不錯。有沒有預先定義的方法,將會有一個class A以及該類內的枚舉是什麼?我嘗試以下,但它沒有工作,因爲我定義的類兩次:

class A; 

enum class A::A_enum 
{ 
    contenta, contentb 
}; 

class A 
{ 
    enum class A_enum {...}; 
} 

然後

class A 
{ 
    // the rest of it 
    // obviously doesn't work because already defined class A 
} 
+0

你能告訴我們循環依賴發生的地方嗎?它是在方法的主體還是在論據中? –

回答

1

前置聲明可以解決這個問題:

class A; 
class B; 

class A { 
    public: 
     enum class A_enum {}; 
     void method_which_uses_class_B(); 
}; 

class B { 
    public: 
     void method_which_uses_A_enum(); 
}; 

void A::method_which_uses_class_B() { 
    A::A_enum instance_of_a_enum; 
    A instance_of_a; 
    B instance_of_b; 
} 

void B::method_which_uses_A_enum() { 
    A::A_enum instance_of_a_enum; 
    A instance_of_a; 
    B instance_of_b; 
} 
2

唯一的窪y處理這種情況是在執行A::method_which_uses_class_B()之後定義的class B

class A 
{ 
    enum class A_enum {}; 

    void method_which_uses_class_B(); 
}; 

class B 
{ 
    void method_which_uses_A_enum() {} 
}; 

void A::method_which_uses_class_B() 
{ 
}