2011-07-18 6 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; 
    } 
    .... 
} 

問題は、発信者が40かのようないくつかの本物の値を渡しているにもかかわらず、0に上書きなっている「ヴァル」でありますそう。場合によっては、呼び出し側が(40程度のように)正しい値をとることもあります。そうでない場合は、40という値が渡されますが、0になります。 これについてのご意見はありますか?私は参照渡す必要がありますか?

+1

'dbPtr-> getDbName()'は 'char *'または 'std :: string&'(何か他のもの)を返しますか? –

+0

また、コード内のValが破損している箇所を教えてください。 LOG_MSGは期待された出力を与えませんか? printステートメントを使用して、コード行がValの予期しない変更を引き起こしていることを確認し、その行を表示する必要があります。 –

+1

以下を明確にし、setSomethingをVal(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を(ヴァル)。 – Rahul

関連する問題