Table::Table(int n): maxGuests(n)
{
int numGuests = 0;
}
int Table::maxOccupancy(void)
{
return maxGuests;
}
int Table::currentOccupancy(void)
{
return numGuests;
}
与上面的代码一样,即使在访问器的末尾返回了警告,也得到了未使用的numGuests
警告。为什么会这样?
谢谢:)
答案 0 :(得分:8)
在代码中
Table::Table(int n): maxGuests(n)
{
int numGuests = 0;
}
定义了局部变量numGuests
,它不是类的属性。而且这没有在任何地方使用。因此,您会收到警告。
在语句int
中删除int numGuests = 0;
应该可以解决此问题。
或者更好的是,您可以更新代码以将该属性包括在初始化列表中,例如:
Table::Table(int n) : maxGuests(n), numGuests(0)
{
}
答案 1 :(得分:7)
摘要中的局部变量numGuests
Table::Table(int n): maxGuests(n)
{
int numGuests = 0;
}
尚未使用。大概是您想要的
struct Table
{
...
int numGuests = 0; // default value
const int maxGuests;
Table(int n) : maxGuests(n) {}
};
答案 2 :(得分:4)
您创建一个与类成员同名的局部变量。只需删除int
即可获得所需的内容:
Table::Table(int n): maxGuests(n)
{
numGuests = 0;
}
答案 3 :(得分:4)
您正在创建一个变量,以“遮盖”您要分配的属性。我不确定为什么在这里使用两种完全不同的初始化方法,但是您可以简化代码并修复如下错误:
Table::Table(int n) : maxGuests(n), numGuests(0)
{
}
只要可行,就可以像这样初始化属性。通常在代码中保留它的用途是在不清楚要分配什么值,需要进行一些计算或需要委派给函数的情况下进行。