class Monitor
{
private:
int rate;
Monitor(int rate)
{
this.rate = rate;
}
}
这是我的代码。我尝试使用通过构造函数“rate”的本地成员设置私有成员“rate”。但是我可以在C#中使用它。
错误是:
表达式必须具有类类型
答案 0 :(得分:12)
this
是一个指针,但使用基本初始化列表更好更准确:
class Monitor
{
int rate;
public:
Monitor(int rate) : rate(rate) { }
};
这样,Monitor::rate
初始化到正确的值,而不是首先默认初始化然后分配。对于更一般的成员对象,这实际上可能是初始化它们的唯一合法方式。
答案 1 :(得分:4)
class Monitor
{
private:
int rate;
Monitor(int rate)
{
this->rate = rate;
}
}
这需要像指针一样对待。因此 - >
答案 2 :(得分:3)
当您引用this
时,您正在访问指向该对象的指针。你想要做的是:
Monitor(int rate)
{
this->rate = rate;
}
答案 3 :(得分:2)
this
关键字表示指向当前对象的指针。
你必须写:
this->rate = rate;
如果您有一个类的实例,则使用点表示法。
答案 4 :(得分:2)
Monitor(int r)
{
rate = r;
}
或者更好的是:
Monitor(int r): rate(r)
{}
答案 5 :(得分:1)
this-> rate = rate。指针使用 - > C ++中的operator。
答案 6 :(得分:1)
由于此是指向self的指针,因此您必须使用它。这可以解决您的问题:
class Monitor
{
private:
int rate;
Monitor(int rate)
{
this->rate = rate; // this is a pointer
}
};
答案 7 :(得分:1)
虽然它是完全合法的C ++代码,但不应该为类的参数和成员使用相同的名称。更好的实施将是:
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;
}
};