我在以下代码中收到此错误
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
答案 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;
不要忘记在析构函数中释放它们。