C++ 关于“使用”的问题;这";C++;
这是我的密码。我尝试用通过构造函数“rate”的本地成员设置私有成员“rate”。但我可以在C#中这样使用它 错误是:C++ 关于“使用”的问题;这";C++;,c++,C++,这是我的密码。我尝试用通过构造函数“rate”的本地成员设置私有成员“rate”。但我可以在C#中这样使用它 错误是: 表达式必须具有类类型当您引用此时,您正在访问指向该对象的指针。您要做的是: class Monitor { private: int rate; Monitor(int rate) { this.rate = rate; } } 这个->速率=速率。指针使用C++中的->运算符。 Monitor(int rate) {
表达式必须具有类类型当您引用此时,您正在访问指向该对象的指针。您要做的是:
class Monitor
{
private:
int rate;
Monitor(int rate)
{
this.rate = rate;
}
}
这个->速率=速率。指针使用C++中的->运算符。
Monitor(int rate)
{
this->rate = rate;
}
这需要像指针一样对待。因此->因为这是指向self的指针,所以必须使用它。这可以解决您的问题:
class Monitor
{
private:
int rate;
Monitor(int rate)
{
this->rate = rate;
}
}
此
关键字表示指向当前对象的指针。
你必须写:
class Monitor
{
private:
int rate;
Monitor(int rate)
{
this->rate = rate; // this is a pointer
}
};
如果您有类的实例,则使用点表示法
正如其他人所说,这是一个指针,但使用基本初始值设定项列表更好、更正确:
this->rate = rate;
这样,Monitor::rate
将初始化为正确的值,而不是先初始化然后分配默认值。对于更一般的成员对象,这实际上可能是初始化它们的唯一合法方法
class Monitor
{
int rate;
public:
Monitor(int rate) : rate(rate) { }
};
或者更好:
Monitor(int r)
{
rate = r;
}
虽然它是完全合法的C++代码,但不应该为类的参数和成员使用相同的名称。更好的实施将是:
Monitor(int r): rate(r)
{}
这是一个指针<代码>这->
是您想要的,所以我必须使用Monitor::rate=rate?还有其他方法吗?@Anycorn:这应该是一个答案,而不是一个注释。使用指针与使用Monitor::rate是相同的->还是不同的概念?@user:它们不同,只有当rate
是static
成员变量时,才可以使用Monitor::rate
。这是一个更优雅的解决方案。谢谢,我不知道我们有这样的方法。但是,我不明白为什么我们不能用那个监视器(int-rate):rate(rate)@user810576:您仍然必须定义构造函数的主体,即使它没有做任何事情,因此我们的主体只是{}
。基初始值设定项列表是定义的一部分,而不是声明的一部分。请注意,某些编译器会警告您隐藏parameter@VJo:谢谢。事实上,我通常会写Monitor(int-r):rate(r){}
,或者如果成员是私人的和装饰性的,比如Monitor(int-rate):mu-rate(rate){}
等等。这是一个很好的调用,特别是如果你想重用参数:Foo(Bar a,Car b):mu a(a),m_b(mu a){
。不是否决票,只是一个IMHO-yech。大多数编码标准都规定不要为成员使用InitialCaps名称。InitialCaps通常用于类。Re the alternativem_nRate
:这也是我个人的偏好,但我真的鄙视匈牙利符号。嗯,不完全是个人喜好;很多很多人真的很鄙视匈牙利符号。那么,你会用什么呢?”比率“,”nRate“,”u rate“?我只是在征求意见。对于数据成员,“rate”——或者更具描述性的词,比如“update\u rate”。或者可能是“更新间隔”,因为很多人在表示“间隔”(单位是时间/某物)时误用了术语“速率”(单位是某物/时间)。对于构造函数或setter,取决于项目编码标准。这通常是我无法控制的。参数名称要么与数据成员的名称完全相同,要么类似于“rate_in”。这个参数是一个伪变量,所以对我来说,赋予它相对于数据成员的优先级就是本末倒置
class Monitor
{
private:
int Rate; // Or m_nRate
public:
Monitor(int rate /* OR nRate */) : Rate(rate) /* m_nRate(nRate);*/
// OR
Monitor(int rate /* OR nRate */)
{
Rate = rate; // this->Rate = rate; // this->m_nRate = nRate;
}
};