1

この論理エラーが発生する理由を説明できません! 見てみましょう:

これはヘッダーにあります-

class PayRoller
{
public:
    void initialize();

    double getNum();
    void setNum(double);
    double getGrossPay();
    void setGrossPay(double);
    double getWage();
    void setWage(double);
    double getAddTotal();
    void setAddTotal(double);
}

オブジェクトが作成された後に呼び出される最初の関数は次のとおりです。

void PayRoller::initialize();
{
    setGrossPay(0.0);
    setWage(0.0);
    setAddTotal(0.0);
    cout << (getGrossPay() + getAddTotal());
    start();
}

最後にゲッターとセッターです。

void PayRoller::setGrossPay(double temp)
{
grossPay = temp;
}

double PayRoller::getWage()
{
return wage;
}

void PayRoller::setWage(double temp)
{
wage = temp;
}

double PayRoller::getAddTotal()
{
return addTotal;
}

void PayRoller::setAddTotal(double temp)
{
wage = temp;
}

コードを (デバッグなしで) 開始すると、initialize() で cout から取得した値は -9.25596e+061 です

ここで何が間違っていますか?私はそれを理解できないようです。前もって感謝します!

4

3 に答える 3

1

setAddTotalメソッドは、その設定賃金であるaddTotalを設定していません。

void PayRoller::setAddTotal(double temp)
{
    wage = temp;
}

する必要があります

void PayRoller::setAddTotal(double temp)
{
    addTotal = temp;
}

それ以外の場合、addTotalは実際には0に設定されておらず、ガベージが含まれているだけです。

于 2013-03-01T06:44:24.007 に答える
0

initialize()メソッドを破棄し、メンバーの初期化リストを使用する必要があります。

Initializationと呼ぶのは実際にはAssignmentであり、 Initialization はメンバーの初期化リストでのみ実行できます。必要なのは初期化です。つまり、作成時にメンバーに値を結び付け、作成にメンバーに値を割り当てません。

割り当てアプローチの問題は、クラスのユーザーが定義した方法でメソッドを呼び出すことに依存する必要があることです。

于 2013-03-01T06:19:09.997 に答える
0

precesion issue number はほぼ 0 のようです。値を long または int に変更してみてください。これを確認できます。

于 2013-03-01T06:26:06.620 に答える