2014-08-29 120 views
1

我尝试在Poco级联异常。级联波科异常

void debug() { 
try { 
    ... 
    xmlFile.parseDocument(*_sim); 
    ... 
    } 
} catch (Poco::Exception& error) { 
    std::cout << "I'm here" << endl; 
    std::cout << "Error : " << error.displayText() << std::endl; 
} 
} 

void XMLParser::parseDocument(Manager &manager) { 
... 
try { 
    Poco::XML::NodeList* policyList = root->childNodes(); 
    for (uint node=0; node < policyList->length(); node++) 
     if (policyList->item(node)->hasChildNodes()) 
      manager.insertRule(parseRule(node, policyList->item(node))); 
} catch(Poco::Exception& error) { 
    std::cout << "Error : " << error.displayText() << std::endl; 
    error.rethrow(); 
} 
} 

Rule* XMLParser::parseRule(int flowID, Poco::XML::Node* rule) throw() { 
    .... 
    if (tLink._srcPort < 0) 
     throw new Poco::Exception("Source Port isn't valid"); 
    .... 
} 

引发最深的异常,但它不会继续执行外部函数。 程序终止。为什么?

回答

2

你抛出一个Poco :: Exception指针,所以你不能通过引用来捕获它。 删除'新'。这应该工作:

.... 
if (tLink._srcPort < 0) 
    throw Poco::Exception("Source Port isn't valid"); 
....