我在 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。这是屏幕截图。
如您所见,头文件中声明的 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 "_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\引用程序集\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/