visual-studio-2012 - Visual Studio 2012 在 Debug模式下超出范围

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

我在 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)
{
}

我在构造函数中放置了断点,并在 watch 上添加了 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();
}

我不知道为什么...

优化在项目属性中被禁用,并且正在以 Debug模式运行。我的代码是 C++/CLI 与 Windows 窗体的混合。因此,/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\引用程序集\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"

提前致谢!

最佳答案

在这种特殊情况下,实例变量 test1 尚未创建。要执行的下一行(标有黄色箭头)是函数中的第一行。它尚未实际执行,因此执行路径尚未完全设置实例,因此 test1 尚不可用。 (首先设置 test2 会有所不同吗?)

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

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

关于visual-studio-2012 - Visual Studio 2012 在 Debug模式下超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17221431/

相关文章:

xna - 如何在Visual Studio 2012上安装XNA游戏工作室?

c# - 传递结构似乎会损坏数据

c++ - 将 C++ 类移植到 ref 类(非托管到托管)

c++ - 使用 native 依赖项加载 clr 库

xaml - 资源本地化: use of x:Uid referring to another assembly's resource

c# - 管理任务列表

c - 如何释放分配给 C 中指针的内存?

c# - 在托管代码和非托管代码之间共享 Graphics 对象时丢失抗锯齿

visual-studio - Windows表单的自动生成的代码在 “using namespace System;”上有错误

c# - 是否可以仅在一个 .exe 中使用 ClickOnce 发布 Visual Studio C# 项目?