Visual Studio 2012调试模式下超出范围

3

我在VS 2012中遇到了一个错误信息,提示“错误:标识符'XXXX'超出范围”。

我发现即使是下面这个非常简单的类,仍然会出现这种情况。

// this is header file
public class IRIS_Database
{
public:
    int test1;
    IRIS_Database::IRIS_Database(void);
    IRIS_Database::~IRIS_Database(void);
};


// this is cpp file
#include "IRIS_Database.h"

/*******************
    Constructor
********************/
IRIS_Database::IRIS_Database(void)
{
    test1 = 5;
    int test2 = 20;

}

/*****************
    Destructor
******************/
IRIS_Database::~IRIS_Database(void)
{
}

我在构造函数中添加了断点,并在监视窗口中添加了test1和test2。以下是屏幕截图。

enter image description here

从图中可以看到,头文件中声明的test1“超出范围”。而在构造函数中声明的本地变量test2则正常。我可以跟踪test2,但无法跟踪test1。

以下是从主函数开始初始化该类的代码。

/*********************
    Main Function
**********************/
int _tmain(int argc, _TCHAR* argv[])
{

    // Initialize Database
    IRIS_Database* IRDB = new IRIS_Database();
}

我不确定为什么...
在项目属性中禁用了优化并以调试模式运行。我的代码是混合了Windows表单的C++/CLI。所以启用了/clr选项。平台工具集是VS 2012中的v110。这是来自属性页的所有选项。如果您想查看特定选项,请告诉我。
/GS /analyze- /W3 /Zc:wchar_t /I"../IRDB_Include" /Zi /Od /sdl- /Fd"Debug\vc110.pdb" /fp:precise /D "_CRT_SECURE_NO_WARNINGS" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /Oy- /clr /FU"C:\Program Files\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\mscorlib.dll" /FU"C:\Program Files\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Data.dll" /FU"C:\Program Files\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.dll" /FU"C:\Program Files\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Drawing.dll" /FU"C:\Program Files\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Windows.Forms.dll" /FU"C:\Program Files\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Xml.dll" /MDd /Fa"Debug\" /EHa /nologo /Fo"Debug\" /Fp"Debug\NearIR.pch"
提前感谢!

3
在Visual Studio 2012 Update 2之后,无法在C++/CLI中对Child对象进行评估。 - Hans Passant
谢谢 Hans,我已经更新并将平台工具集更改为 VS 2010,它运行正常。 - diehard98
1个回答

2
在这种情况下,实例变量test1尚未创建。要执行的下一行(用黄色箭头标记)是函数中的第一行。它尚未实际执行,因此执行路径还没有完全设置实例,所以test1尚不可用。(先设置test2是否有影响?)
另一方面,test2是构造函数的局部变量,并且存储在函数的本地位置。因此,在该函数的任何位置始终可以访问它。
这只是Watch工具的问题。需要一些额外的工作,但是好的调试器应该能够显示类的成员变量存在于构造函数中。微软表示他们正在解决此问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接