块嵌套太深 - 由虚函数引起

时间:2017-06-15 08:49:38

标签: c++

我在以下代码中收到此错误 error C1061: compiler limit : blocks nested too deeply
我没有模板,我有1个宏,3个嵌套命名空间和简单的平面类,如下所示。
该类包含225个数据成员,每个成员都有一个Get()函数 当试图单独编译这个类时,它工作正常 当我将此对象用作导出的dll中另一个类的数据成员时,会发生错误。

我不喜欢动态分配,因为时间至关重要 我需要使用我的所有数据成员(可以用更少的数据完成,但调试会更难),但我不明白许多数组的声明如何影响这个嵌套的块。

我尝试过的事情:
没有'虚拟'在Get()函数中,它编译得很好 实际上,一个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

1 个答案:

答案 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;

不要忘记在析构函数中释放它们。