以下Processing / Java代码有什么问题吗?
class SensorData{
private float temperature;
private float distance;
SensorData(float temperature, float distance) {
this.temperature = temperature;
this.distance = distance;
}
float getTemperature() {
return this.temperature;
}
float getDistance() {
return this.distance;
}
}
我不断收到以下消息:
The nested type SensorData cannot hide an enclosing type
上下文是一个Processing项目,SensorData类被用作同一项目文件夹中草图的对象。
答案 0 :(得分:2)
多件事,因为你不是在编写C ++,而是编写C#或Java:
class SensorData{
private:
float temperature;
float distance;
public:
SensorData(float temperature, float distance) {
this->temperature = temperature;
this->distance = distance;
}
float getTemperature() {
return this->temperature;
}
float getDistance() {
return this->distance;
}
}
在C ++中,this
是一个指针,因此您需要->
来访问元素。
另外,为什么你为参数和成员使用相同的名字?它的工作原理是因为您在成员之前使用this->
,但我建议您更改参数名称。
此外,习惯使用初始化列表。我把课写成:
class SensorData{
private:
float temperature;
float distance;
public:
SensorData(float t, float d) : temperature(t), distance(d) {
}
float getTemperature() const {
return temperature;
}
float getDistance() const {
return distance;
}
}
答案 1 :(得分:1)
基本语法错误:
class SensorData{
private: // following lines are private access
float temperature;
float distance;
public: // following lines are public access
SensorData(float temperature, float distance) {
this->temperature = temperature; // this is a pointer
this->distance = distance;
}
float getTemperature() {
return this->temperature;
}
float getDistance() {
return this->distance;
}
}; // class declaration ends with semi-colon
虽然在这种特殊情况下您不需要使用this
。此外,您的构造函数可以从构造函数初始化列表中受益:
SensorData(float temperature, float distance)
: temperature(temperature), distance(distance){
}
,您的访问方式应为const
。
float getTemperature() const {
return this->temperature;
}
总之,获得一本好的C ++书。
答案 2 :(得分:0)
第一个问题是它不是C ++。
在C ++中,访问说明符(public
,protected
和private
)不属于成员声明,但成员规范。因此,它们通过冒号(:
)与成员声明分开,并应用于所有后续成员声明,直到下一个访问说明符为止
隐式this
属于指针类型,因此要访问它的字段,请使用operator->
。
C ++类定义(或类说明符)语句不会由}
终止,而是由以下;
终止。您可以选择在终端;
之前定义类类型的一个或多个变量。