2012-12-09 3 views
0

왜이 코드 조각 않습니다 단지 인쇄이제 stringstream가 불완전하게 채워

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::getline 또는 stringstream::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

사용중인 추출 연산자는 입력 스트림에서 공백으로 구분 문자열을 읽습니다

나의 추천 std::ostringstream로 변경하고 std::ostringstream::str을 사용하는 것입니다. 따라서, 입력에서 첫 번째 공백을 칠 때 멈 춥니 다.

그냥

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

log->logError(serror); 

교체 (당신은 모든 serror 필요하지 않습니다).

관련 문제