Стрингстрим не полностью заполнен

Почему этот фрагмент кода:

 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

Решение

Оператор ввода >> извлекает только до следующего пробела. Либо использовать 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());
3

Другие решения

Оператор извлечения, который вы используете, читает разделенных пробелами строка из входного потока. Таким образом, он останавливается, когда попадает в первый пробел в нашем входе.

Просто замени

log->logError(serror);

с

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

(и тебе не нужно serror совсем).

2

По вопросам рекламы [email protected]