C ++未使用的变量警告,即使我在函数末尾将其返回

时间:2018-08-07 15:59:47

标签: c++

Table::Table(int n): maxGuests(n)
{
    int numGuests = 0;
}
int Table::maxOccupancy(void)
{
    return maxGuests;
}

int Table::currentOccupancy(void)
{
    return numGuests;
}

与上面的代码一样,即使在访问器的末尾返回了警告,也得到了未使用的numGuests警告。为什么会这样?

谢谢:)

4 个答案:

答案 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)
{
}

只要可行,就可以像这样初始化属性。通常在代码中保留它的用途是在不清楚要分配什么值,需要进行一些计算或需要委派给函数的情况下进行。