C++ 为什么我的代码会说“不”;是”;什么时候应该说;否;?

C++ 为什么我的代码会说“不”;是”;什么时候应该说;否;?,c++,class,boolean,C++,Class,Boolean,当将freeSeats设置为0时,我的代码仍然表示一个人在他/她的车中有可用的座位 我创建了两个类。一辆车一个人。Car类有一个功能,可以查看车内是否有免费座椅。人和物体可以有一辆车。当检查此人是否有可用座位时,我的代码响应“是”,即使我输入“0”。为什么? #pragma一次 #包括 //这是班车申报单 班车{ 私人: 无符号整数; 公众: bool hasFreeSeats()常量; 空位预留空位(); 汽车(无符号整数); }; //下面是函数定义 #包括“Car.h” bool Car:

当将freeSeats设置为0时,我的代码仍然表示一个人在他/她的车中有可用的座位

我创建了两个类。一辆车一个人。Car类有一个功能,可以查看车内是否有免费座椅。人和物体可以有一辆车。当检查此人是否有可用座位时,我的代码响应“是”,即使我输入“0”。为什么?

#pragma一次
#包括
//这是班车申报单
班车{
私人:
无符号整数;
公众:
bool hasFreeSeats()常量;
空位预留空位();
汽车(无符号整数);
};
//下面是函数定义
#包括“Car.h”
bool Car::hasFreeSeats()常量{
如果(自由座位>0)
返回true;
返回false;
}
void Car::reserveFreeSeat(){
--自由座位;
}
Car::Car(无符号整数自由区域):
自由座位{自由座位}
{
}
//这是班级人员声明
班主任{
私人:
std::字符串名;
std::字符串电子邮件;
Car*Car;//指向汽车的指针
公众:
人员(std::string name,std::string email,Car*Car=nullptr);
std::string getName()常量;
std::string getEmail()常量;
void setEmail();
bool hasAvalibaleSeats()常量;
friend std::ostream和运营商newEmail;
电子邮件=新电子邮件;
std::cout这里有一个输入错误:

Car::Car(unsigned int freeSeas) :
    freeSeats{ freeSeats }
    {}
您编写了
freeSeas
而不是
freeSeats
。因此,
freeSeas
参数未使用,
freeSeats{freeSeats}
什么也不做,因为
freeseat
引用的是成员变量,而不是参数。

启用编译器警告时,调试会容易得多。编译器是您的朋友,如果您愿意听到它,它会帮到您很大的忙

例如,
gcc
在编译代码时给了我以下警告:

prog.cc: In constructor 'Car::Car(unsigned int)':
prog.cc:37:23: warning: unused parameter 'freeSeas' [-Wunused-parameter]
 Car::Car(unsigned int freeSeas) :
          ~~~~~~~~~~~~~^~~~~~~~
prog.cc: In constructor 'Car::Car(unsigned int)':
prog.cc:38:16: warning: '*<unknown>.Car::freeSeats' is used uninitialized in this function [-Wuninitialized]
     freeSeats{ freeSeats }
                ^~~~~~~~~
prog.cc:在构造函数“Car::Car(unsigned int)”中:
程序cc:37:23:警告:未使用的参数“freeSeas”[-Wunused参数]
Car::Car(无符号整数自由区域):
~~~~~~~~~~~~~^~~~~~~~
prog.cc:在构造函数“Car::Car(unsigned int)”中:
prog.cc:38:16:警告:“*.Car::freesets”在此函数中未初始化使用[-Wuninitialized]
自由座位{自由座位}
^~~~~~~~~
我不必了解所有的事情,但它告诉我两件事:

  • 存在未使用的参数(为什么?用于初始化…)
  • 变量是用未初始化的值初始化的(为什么?)

  • 它让我更仔细地看了看这个构造函数,然后你可以看到输入错误。

    typo?
    Car::Car(unsigned int freeSeas):freesets{freesets}{}
    构造函数参数
    freeSeas
    从未在构造函数中使用。
    警告:当在这里使用时,'freesets'字段未初始化[-Wuninitialized]
    警告:未使用的参数“freeSeas”[-Wunused参数]
    。打开编译器警告!脱离主题:请不要编写类似于
    if(条件)的代码返回true;否则返回false;
    –只要有
    返回条件;
    ,这是更干净的代码。@MarkStorer在构造函数中有一个参数和一个同名的成员是完全可以的。当使用成员时,初始化列表的语法很明显(
    :member(…)
    ,在任何其他位置,它被参数隐藏(但可以通过
    此->成员引用)。我不同意有必要将名称更改为不同的名称。通常,成员字段和构造函数参数将具有相同的名称,因为它们是相同的,并且它们的意思相同。强制规则为这两个字段使用不同的名称不可避免地会导致匈牙利符号(或者
    m_field{field}
    或者类似
    field的东西){providedField}
    )。
    prog.cc: In constructor 'Car::Car(unsigned int)':
    prog.cc:37:23: warning: unused parameter 'freeSeas' [-Wunused-parameter]
     Car::Car(unsigned int freeSeas) :
              ~~~~~~~~~~~~~^~~~~~~~
    prog.cc: In constructor 'Car::Car(unsigned int)':
    prog.cc:38:16: warning: '*<unknown>.Car::freeSeats' is used uninitialized in this function [-Wuninitialized]
         freeSeats{ freeSeats }
                    ^~~~~~~~~