2017-03-30 103 views
0

類路徑的構造函數最初包含以下代碼,用於檢查文件中是否存在元素(「gpx」,「rte」等)。它應該運行。C++中的重構代碼

if (! elementExists(source,"gpx")) 
    { 
     oss << endl << "no gpx tag"; 
     constructorReport = oss.str(); 
     constructorSucceeded = false; 
     return; 
    } 
    if (! elementExists(source,"rte")) 
    { 
     oss << endl << "no rte tag"; 
     constructorReport = oss.str(); 
     constructorSucceeded = false; 
     return; 
    } 

我試着引入一個函數來替換這些if語句。該程序的構建沒問題。

void Route::constCheck(string source, string type) 
{ 

    if (! XML_Parser::elementExists(source, type)) 
    { 
     std::ostringstream oss; 
     oss << std::endl << "no" << type <<" tag"; 
     constructorReport = oss.str(); 
     constructorSucceeded = false; 
     return; 
    } 
} 

我已經改變了它檢查產生錯誤的GPX文件,但與我的附加功能,它繼續好像沒有錯誤。

任何幫助表示讚賞,請讓我知道,如果你需要更多的信息。我試圖按照指導原則保持代碼輕鬆。

+2

你覺得呢'return'呢? –

+0

返回void函數沒有必要:)但這裏的問題在於其他地方。 – 0xDEFACED

+0

你能告訴我們你如何以及在哪裏執行你的新功能嗎? – 0xDEFACED

回答

0

在您的原始代碼中,您在第一次測試失敗時從函數返回,您不會繼續嘗試其他測試。

現在您已經將測試移到了函數中,調用者無法知道測試是否失敗,因此它將執行所有測試,並且在其中一個失敗時不會從其函數返回。你需要這個函數來返回一個指示它是否失敗的布爾值。

bool Route::constCheck(string source, string type) 
{ 

    if (! XML_Parser::elementExists(source, type)) 
    { 
     std::ostringstream oss; 
     oss << std::endl << "no" << type <<" tag"; 
     constructorReport = oss.str(); 
     constructorSucceeded = false; 
     return false; 
    } 
    return true; 
} 

然後更換爲原來的代碼是這樣:

if (!constCheck(source, "gpx")) { 
    return; 
} 
if (!constCheck(source, "rte")) { 
    return; 
} 
+0

我明白我出錯的地方。代碼完美工作,我只是不得不忽略!當調用它時。謝謝您的幫助!。 – JohnDoe