Visual Studio 2010错误:尝试调试时标识符超出范围

时间:2014-11-07 01:22:22

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

我正在逐步完成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);
    }

0 个答案:

没有答案