Visual studio 2010 Visual Studio 2010错误:尝试调试时标识符超出范围 我正在通过C++代码,我看到一堆东西,上面写着这个符号是未定义的。
最奇怪的是,我在其中加入了一个断点。我在方法签名下添加了几行,并在方法中的String^变量类型中添加了一个watch。第一个我可以看到的价值。方法签名中的第二个表示未定义。这是什么原因造成的 如果我把断点放在第一行,我可以在string1中看到一个值,但是string2是未定义的。“监视”窗口中的错误消息为: 错误:标识符“string2”超出范围 项目处于调试模式。 配置属性->C/C++->优化->优化=禁用(/Od)Visual studio 2010 Visual Studio 2010错误:尝试调试时标识符超出范围 我正在通过C++代码,我看到一堆东西,上面写着这个符号是未定义的。,visual-studio-2010,visual-c++,c++-cli,Visual Studio 2010,Visual C++,C++ Cli,最奇怪的是,我在其中加入了一个断点。我在方法签名下添加了几行,并在方法中的String^变量类型中添加了一个watch。第一个我可以看到的价值。方法签名中的第二个表示未定义。这是什么原因造成的 如果我把断点放在第一行,我可以在string1中看到一个值,但是string2是未定义的。“监视”窗口中的错误消息为: 错误:标识符“string2”超出范围 项目处于调试模式。 配置属性->C/C++->优化->优化=禁用(/Od) 请给我们看一些代码!如果不是100行左右,你能把整个方法加起来吗。以及
请给我们看一些代码!如果不是100行左右,你能把整个方法加起来吗。以及调用此方法的行。并告诉我们编译时使用的模式(确保它是调试模式,以避免优化)。如果不一直跟踪变量的根(我假设它不是硬编码字符串),就很难看出它是否超出范围。如果您一直使用断点跟踪它,那么您将有很大机会看到问题所在。祝你好运MSDN搜索
“超出范围”
时不会给出这样的错误消息,因此我打赌您没有发布实际错误,而是对其进行了解释。此外,您似乎无法确定变量的名称是string2
还是string2
。请记住,C++/CLI是区分大小写的语言。
System::String^ MyNameSpace::CodeXML(String^ string1, String^ string2)
{
System::Diagnostics::Stopwatch ^ performance_timer = System::Diagnostics::Stopwatch::StartNew();
if(System::String::IsNullOrEmpty(string1))
return System::String::Empty;
int iTimeLimit=500,flags=0;
bool bDBGFilter=false;
System::String^ abc = System::String::Empty;
if (!System::String::IsNullOrEmpty(string2)) {
System::IO::StringReader^ sr = gcnew System::IO::StringReader(string2);
XPathDocument^ doc;
try {
doc = gcnew XPathDocument(sr);
} catch (System::Xml::XmlException^) {
throw_managed_exception("Bad parameters XML");
}
XPathNavigator^ root = doc->CreateNavigator();
if (XPathNavigator^ nav = root->SelectSingleNode("XXX/A"))
if(!System::String::IsNullOrEmpty(nav->Value))
iTimeLimit = nav->ValueAsInt;
if (XPathNavigator^ nav = root->SelectSingleNode("XXX/B"))
if(!System::String::IsNullOrEmpty(nav->Value))
flags = nav->ValueAsInt;
if (XPathNavigator^ nav = root->SelectSingleNode("XXX/C"))
if(!System::String::IsNullOrEmpty(nav->Value))
abc = nav->Value->Trim();
}
MyReport Report(EMPTY_STRING, iTimeLimit);
ExtractedData^ ed = gcnew ExtractedData();
if(System::String::IsNullOrEmpty(abc))
Report.SetHasSuperfilter(false);
else
Report.SetHasSuperfilter(true);
Report.init();
bool bRet = ExtractCodes(string1, abc, ed, Report);
if (!bRet)
throw_managed_exception("ExtractCodes returned false");
ostringstream dgn_strm;
Report.summarize(dgn_strm);
performance_timer->Stop();
Report.add_performance_output("CodeXML", (long)performance_timer->ElapsedMilliseconds);
String^ rv = OutputWriter::serialize(ed, Report);
if (DBO d = "old") d << dgn_strm.str();
MappingDiagnosticsSummaryLogger::IncDocCount();
MappingDiagnosticsSummaryLogger::Log();
return rv;
}
virtual System::String^ ParentFunction(System::String^ string1, System::String^ string2) {
return myObject->CodeXML(string1, string2);
}