2011-07-18 32 views
-3

我有一段代碼,它的工作原理是這樣的:int值覆蓋到零有時

boolQwInterface::setSomething(const A& obj, const B& Name, int Val) 
{ 
    bool ret=true; 

    LOG_MSG(msg, SIZE, "writing: %s, %s, %d", dbPtr->getDbName(), Name.getRepr().c_str(), Val); 

    if(WriteDB(dbPtr->getid(), obj.c_string(), Name.getRepr().c_str(), (void*)&Val)<0) 
    { 
     LOG_MSG(msg, SIZE, "failed: %s", Name.getRepr().c_str()); 
     ret=false; 
    } 
    .... 
} 

的問題是「瓦爾」被覆蓋掉至0,即使調用者傳遞一些真正的價值像40或所以。有時,調用者傳遞正確的值(如40左右),否則將值傳遞給零,但值爲40。 對此有何想法?可能是我應該通過參考?

+1

'dbPtr-> getDbName()'返回一個'char *'或一個'std :: string&'(或別的東西)? –

+0

你也應該告訴我們在代碼中的哪一點Val損壞了。 LOG_MSG沒有給出預期的輸出?您應該使用打印語句在Val的意外更改中查找代碼行結果,並且您應該向我們顯示該行。 –

+1

請澄清以下內容,您可以將Val與Val一起調用setSomething(也許是40)。 LOG_MSG將輸出40作爲日誌中的值。 LOG_MSG使用setSomething的值傳遞,或者可能是一個const引用。 WriteDB有時會編輯Val的值? –

回答

1

我正在使用答案框,因爲這更容易用換行符來描述。

代碼有趣的部分可以簡化爲:

bool setSomething(int Val) { 
    FunctionOne(Val); 
    FunctionTwo(&Val); 
    .... 
} 

你真的沒有給予足夠的信息來幫助你所有的東西。

+0

FunctionOne(Val);當setSomething被調用val = 40時,將打印爲0。setSomething應該是類似的東西嗎? bool setSomething(int&Val) 因爲在setSomething函數外面,當我們嘗試打印這個值時,它說0! – Rahul

+0

好的,這裏是setSomething(....)的調用者; unsigned int val; setSomething(name1,name2, static_cast (val); – Rahul