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

C++ C++;未使用的变量警告,即使我在函数末尾返回它,c++,C++,在上面的代码中,我得到了一个unusednumGuests警告,即使在访问器末尾返回了它。为什么会这样 谢谢:)在代码中 Table::Table(int n): maxGuests(n) { int numGuests = 0; } int Table::maxOccupancy(void) { return maxGuests; } int Table::currentOccupancy(void) { return numGuests; } 定义了一个局部变量n

在上面的代码中,我得到了一个unused
numGuests
警告,即使在访问器末尾返回了它。为什么会这样

谢谢:)

在代码中

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

int Table::currentOccupancy(void)
{
    return numGuests;
}
定义了一个局部变量
numGuests
,它不是类属性。这在任何地方都没有使用。因此你得到了警告。 删除语句
int numGuests=0中的
int
应解决此问题

或者,您可以更新代码,将此属性包含在初始值设定项列表中,如下所示:

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

代码段中的局部变量
numGuests

Table::Table(int n) : maxGuests(n), numGuests(0)
{
}
尚未使用。想必你想要的是

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

创建与类成员同名的局部变量。只需删除
int
即可获得所需内容:

struct Table
{
    ...
    int numGuests = 0;      // default value
    const int maxGuests;
    Table(int n) : maxGuests(n) {}
};

您正在创建一个变量,该变量“隐藏”您试图指定的属性。我不确定您为什么在这里使用两种完全不同的初始化方法,但您可以简化代码并修复如下错误:

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

只要可行,就这样初始化属性。在代码中执行此操作通常是在不清楚将分配什么值、需要进行一些计算或需要委托给函数执行此操作的情况下保留的。

您应该逐字引用编译器给您的警告消息,并显示报告的行。您认为
int numGuests=0在构造函数中是否存在?谢天谢地,编译器告诉您这是一个问题。此警告实际上是一个错误。编译器找到了它,并告诉您,否则代码将无法按预期工作。更好的做法是将初始化移到初始化列表中,而不是移到构造函数体中。@MananShah@Walter的答案更详细。您可以在声明中正确地初始化简单类型,或者如果出于任何原因不想初始化,您可以在构造函数的主体之前这样做:
Table::Table(int n):maxGuests(n),numGuests(0){}
@JesperJuhl关于before这个词呢?不幸的是,我不是以英语为母语的人,有时我会忘记术语。那么,如果初始化列表不在构造函数的主体之前,那么它在哪里呢?@lexserveev这只是我的观点,关于这个主题,但是构造有什么错,而不是?在这方面,它的意思是“而不是”。初始化列表相对于构造器主体的位置是不相关的,而前面的单词会使它看起来好像是,同时,并没有传递与“而不是”相同的信息。注意:我也不是一个以英语为母语的人。虽然这“修复”了问题中的代码,但它暗示了糟糕的风格。成员变量应该尽可能早地初始化,而在这里这是迟来完成的。
Table::Table(int n) : maxGuests(n), numGuests(0)
{
}