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を使用して同じ出力を取得しているため、ロガーに問題はないようです。

4

2 に答える 2

3

input演算子>>は、次の空白までのみ抽出します。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());
于 2012-12-09T12:24:09.830 に答える
2

使用している抽出演算子は、入力ストリームからスペース区切りの文字列を読み取ります。したがって、入力の最初のスペースに到達すると停止します。

交換するだけ

log->logError(serror);

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

(そしてあなたはまったく必要ありませんserror)。

于 2012-12-09T12:24:14.103 に答える