2013-03-01 50 views
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(); 
} 

最后这里的getter和setter-

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; 
} 

当我启动代码(没有调试)我从cout得到的值 in initialize()is -9.25596e + 061

我在做什么错在这里?我似乎无法弄清楚。提前致谢!

+1

“grossPay”甚至定义在哪里? – nneonneo 2013-03-01 06:16:47

+1

getGrossPay()在哪里?为什么你使用initialize()而不是构造函数? – Slava 2013-03-01 06:19:10

+0

是否在构造函数中初始化了'addTotal'? C++在默认情况下不会初始化成员,因此可能由于未初始化的内存,此成员或其他成员正在返回垃圾信息。 – 2013-03-01 06:19:14

回答

0

您需要取消initialize()方法并使用member initialization list

你所谓的初始化实际上是分配,初始化只能在成员初始化列表来完成。你需要的是初始化,即:没有给成员分配值创造一个值是在创建的时候占用了一个成员

分配方法的问题是您需要依赖您的类的用户以您定义的方式调用方法,而这些方法可能不是。

+0

当然同意,但'initialize()'中有两行代码不能从初始化列表中调用。忘记调用'cout',但我假设'start'是必需的,他可能不想在构造函数体中调用它。 – 2013-03-01 06:29:08

+0

也许这将有助于更好地解释我的代码https://www.dropbox.com/sh/kb0lcw9sda9ggje/zCQ3j84u0f – 2013-03-01 06:31:51

+0

@EdS .:这是一个糟糕的设计,除非OP告诉我们什么'start()'确实,我们无法告诉如何改善这一点。 – 2013-03-01 06:32:33

0

似乎precesion问题的数字几乎是0.尝试将值更改为long或int,这可以被满足。

+0

对于这个问题,我不能使用整数,因为该程序需要两位小数美元金额,但我得到它的工作!只是不小心让SetAddTotal()设置了错误的变量。 – 2013-03-01 06:31:26

+0

这只是为了验证精度是否是一个问题,而不是一起改变数据类型。 – 2013-03-01 06:34:34

1

你的setAddTotal方法没有设置addTotal,它的设置工资。

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

应该

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

否则,addTotal实际上并没有设置为0,它只是包含了垃圾。