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)

Logger 行如下所示:

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

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

但似乎记录器没有错,因为我使用 cerr 得到了相同的输出。

4

2 回答 2

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());
于 2012-12-09T12:24:09.830 回答
2

您正在使用的提取运算符从输入流中读取以空格分隔的字符串。因此,当它到达我们输入的第一个空格时它会停止。

只需更换

log->logError(serror);

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

(你根本不需要serror)。

于 2012-12-09T12:24:14.103 回答