我正在逐步完成c ++代码,我看到了很多东西,它说这个符号是未定义的。
最奇怪的一个是我提出了一个断点的方法。我在方法签名下有几行,我在方法中添加了一个String ^变量类型的监视。第一个我可以看到价值。方法签名中的第二个,它说它是未定义的。什么可能导致这种情况?
如果我将断点放在第一行,我可以在string1中看到一个值,但是string2是未定义的。监视窗口中的错误消息是:
错误:标识符' string2'超出范围
项目处于调试模式。 配置属性 - > C / C ++ - >优化 - >优化=禁用(/ Od)
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);
}