gpt4 book ai didi

c++ - 变量打印为 nan 或 inf 而不是实际值

转载 作者:行者123 更新时间:2023-11-30 02:45:16 29 4
gpt4 key购买 nike

我正在开发一个根据距离和速度计算时间的程序,当我输出从 a 点到 b 点而不是 100 英里的最后时间时,我得到的是 nan 或inf 取决于我的类(class)是如何设置的。有人可以帮我吗?

我类的一部分:

class Trip
{
private:
string chicago, illinois, destCity, destState;
double distance, time, rate;

public:
Trip()
{
chicago = "Chicago";
illinois = "Illinois";
destCity = "";
destState = "";
distance = 0.0;
time = 0.0;
rate = 0.0;
}

Trip(string city, string state, double distance)
{
chicago = "Chicago";
illinois = "Illinois";
destCity = city;
destState = state;
distance = 0.0;
time = 0.0;
rate = 0.0;
}

这就是我的主要方法中的构造函数的样子:

Trip atlanta("Atlanta", "Georgia", 587); 

然后这里有一些可能是问题的一部分的增变器方法:

void Trip::setRate(double mph)
{
mph = rate;
}

void Trip::calcTime()
{
time = distance/rate;
}

现在如果我这样设置我的类(class)

this->city = "";
this->distance = 0.0;

当我使用访问器方法检索时间、距离等时,打印为“nan”,但如果我像这样设置我的类

city = "";
distance = 0.0;

然后我得到“inf”。当我调试程序时,即使在我使用构造函数将值传递给类成员之后,trip 对象也会显示所有变量为 0。我不知道出了什么问题。

最佳答案

在这个函数中:

Trip(string city, string state, double distance)
{
// ...
distance = 0.0;

最后一行设置函数参数 distance。不是类(class)成员。类成员保持未初始化状态,因此有时打印时会出现垃圾。

要解决此问题,您可以编写 this->distance = 0.0;,或者最好使用构造函数初始化列表:

Trip(string city, string state, double distance)
: chicago("Chicago")
, distance(distance)
, // etc.
{
}

和/或对参数使用与类成员不同的名称。

在初始化列表中,distance(distance)表示this->distance被初始化为参数distance,因为外面的东西括号必须是类成员的名称。


在 C++11 中,您可以在类定义中设置默认值,这样您就不必在每个构造函数中重复它们:

class Trip
{
private:
string chicago, illinois, destCity, destState;
double distance = 0.0;
double time = 0.0;
double rate = 0.0;

注意不需要将string初始化为空;它们有一个默认的构造函数,所以未初始化的 strings 保证是空字符串,而不是垃圾。

关于c++ - 变量打印为 nan 或 inf 而不是实际值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24643388/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com