Visual studio 2010 Visual Studio 2010错误:尝试调试时标识符超出范围 我正在通过C++代码,我看到一堆东西,上面写着这个符号是未定义的。

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行左右,你能把整个方法加起来吗。以及

最奇怪的是,我在其中加入了一个断点。我在方法签名下添加了几行,并在方法中的String^变量类型中添加了一个watch。第一个我可以看到的价值。方法签名中的第二个表示未定义。这是什么原因造成的

如果我把断点放在第一行,我可以在string1中看到一个值,但是string2是未定义的。“监视”窗口中的错误消息为:

错误:标识符“string2”超出范围

项目处于调试模式。 配置属性->C/C++->优化->优化=禁用(/Od)


请给我们看一些代码!如果不是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);
    }