2012-12-09 21 views
0

爲什麼這個代碼片段:字符串流不完全充滿

if (iErr) { 
    std::stringstream ss; 
    string serror("error"); 
    ss << "lua error code " << iErr << ": " << lua_tostring(lua, -1); 
    ss >> serror; 

    Log *log= StandardLog::getInstance(); 
    log->logError("Lua error following in next line"); 
    log->logError(serror); 

    //lua_pop(lua, 1);/* pop error message from the stack */ 
    return 1; 
} 

只是打印:

Lua error following in next line 
lua 

,而不是

Lua error following in next line 
lua error code 3: lua/generator/generator_example_nodenavigator.lua:10: attempt to call global 'require' (a nil value) 

記錄儀線是這樣的:

void Logger::log(char message[]){ 
    string smessage(message); 
    log(smessage); 
} 

void Logger::log(string smessage){ 
    ... 
} 

但它似乎記錄器沒有錯,因爲我得到相同的輸出使用cerr。

回答

3

輸入運算符>>只提取,直到下一個空白爲止。使用std::getlinestringstream::str函數來獲取字符串。

我的建議是改變std::ostringstream和使用std::ostringstream::str

std::ostringstream oss; 

oss << "lua error code " << iErr << ": " << lua_tostring(lua, -1); 

Log *log= StandardLog::getInstance(); 
log->logError("Lua error following in next line"); 
log->logError(oss.str()); 
2

您正在使用的提取操作讀取輸入流空格分隔字符串。所以,它會在我們輸入中的第一個空格時停止。

只是

log->logError(ss.str()); 

更換

log->logError(serror); 

(你不需要serror在所有)。