C++ C++;未使用的变量警告,即使我在函数末尾返回它
在上面的代码中,我得到了一个unusedC++ 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
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)
{
}