为什么这段代码片段:
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)
Logger行看起来像这样:
void Logger::log(char message[]){
string smessage(message);
log(smessage);
}
void Logger::log(string smessage){
...
}
但似乎记录器没有故障,因为我使用cerr获得相同的输出。
答案 0 :(得分:3)
输入操作符>>
仅提取到下一个空格。使用std::getline
或stringstream::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());
答案 1 :(得分:2)
您正在使用的提取运算符从输入流中读取空格分隔的字符串。因此,它会在我们输入的第一个空格中停止。
只需替换
log->logError(serror);
与
log->logError(ss.str());
(根本不需要serror
。)