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。这是屏幕截图。

在此处输入图像描述

如您所见,在头文件中声明的 test1 是“超出范围”。在构造函数中声明的局部变量 test2 是可以的。我可以跟踪 test2 但不能跟踪 test1。

这是从 main 函数启动此类的代码。

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

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

我不确定为什么...

优化在项目属性中被禁用,并且以调试模式运行。我的代码是混合了 Windows 表单的 C++/CLI。因此,启用了 /clr 选项。平台工具集是 v110,即 VS 2012。这是属性页面中的所有选项。如果您想查看特定选项,请告诉我。

/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 "_D​​EBUG" /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文件\参考程序集\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 \近红外.pch"

提前致谢!

4

1 回答 1

2

在这种特殊情况下,test1尚未创建实例变量。要执行的下一行(标有黄色箭头)是函数的第一行。它还没有真正执行,所以执行路径还没有设置好实例,所以test1还不可用。(设置test2先有影响吗?)

另一方面,test2是构造函数的局部变量,并存储在函数的本地。因此,它始终可以在该函数中的任何位置访问。

这只是 Watch 工具的一个问题。这需要一些额外的工作,但一个好的调试器应该能够显示类的成员变量存在于构造函数中。MS说他们正在解决这个问题。

于 2013-10-23T05:55:44.867 回答