【问题标题】:Visual Studio 2012 Out of scope in debug modeVisual Studio 2012 在调试模式下超出范围
【发布时间】:2013-06-17 18:28:26
【问题描述】:

我收到一些错误消息,在 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 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 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"

提前致谢!

【问题讨论】:

标签: visual-studio-2012 c++-cli


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-09-12
    • 1970-01-01
    • 2014-10-12
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    相关资源
    最近更新 更多