2017-06-15 144 views
-2

引起我收到下面的代碼
error C1061: compiler limit : blocks nested too deeply
我沒有模板這個錯誤,我有1個微距,3個嵌套的命名空間,以及簡單的平面類,你可以看到下面。
該類包含225個數據成員,每個成員都有一個Get()函數。
當試圖單獨編譯這個類時,它工作正常。
當我使用此對象作爲導出的dll中另一個類的數據成員時發生該錯誤。塊嵌套太深 - 由虛函數

我不想使用動態分配,因爲時間是最重要的。
我需要使用我所有的數據成員(這可以用更少的數量完成,但調試會更困難),但我不明白這個許多數組的聲明如何影響這個嵌套塊。

事情我已經嘗試:
沒有在得到「虛擬」()函數,它編譯罰款。
實際上,一個帶有'virtual'的Get()函數有126個數據成員足以導致這個問題。
沒有類定義中的'NATIVEDLL_API'宏,它編譯好。
當所有的數組都是指針時,它編譯得很好。
MAX_SIZE宏值在這裏似乎不成問題。

Calculator.h

#ifdef CALCULATORDLL_EXPORTS 
#define NATIVEDLL_API __declspec(dllexport) 
#else 
#define NATIVEDLL_API __declspec(dllimport) 
#endif 
#define MAX_SIZE 1000 
class DataHelper 
{ 
public: 
    DataHelper(){} 
    virtual double* GetPhase1(){return m_phase1;} // "virtual " cause error C1061 
    virtual double* GetPhase2(){return m_phase2;} // "virtual " cause error C1061 
    virtual double* GetPhase3(){return m_phase3;} // "virtual " cause error C1061 
    ... more like those (225 in total) 
    double m_phase1[MAX_SIZE]; 
    double m_phase2[MAX_SIZE]; 
    double m_phase3[MAX_SIZE]; 
    .... more like those (225 in total) 
}; 


class NATIVEDLL_API Calcaultor   
{ 
    DataHelper m_staticData; 
}; // the error points to this line 
+3

你接收*什麼*錯誤? –

+0

我也在郵件正文中添加了錯誤。它與標題中的相同。 –

+0

你確定你需要那麼多的成員和獲得者?爲什麼不簡單地使用二維數組? –

回答

0

225 * 1000 * 8 =每類的實例1.7MB。這不太適合正常的堆棧。如果您使用堆而不是堆棧的,它應該工作,所以爲什麼不類更改爲:

DataHelper() 
{ 
    m_phase1 = new double[MAX_SIZE]; 
    m_phase2 = new double[MAX_SIZE]; 
    m_phase3 = new double[MAX_SIZE]; 
} 

double *m_phase1; 
double *m_phase2; 
double *m_phase3; 

不要忘了釋放他們的析構函數。

+0

謝謝,我不想使用動態分配,因爲它需要更多時間和我需要在這部分代碼中保持高效。此外,我試圖減少MAX_SIZE宏爲2,它仍然拋出此編譯錯誤。 –