Processing / Java中的“Enclosing type”错误

时间:2012-08-14 22:30:37

标签: java class processing

以下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类被用作同一项目文件夹中草图的对象。

3 个答案:

答案 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 ++中,访问说明符publicprotectedprivate)不属于成员声明,但成员规范。因此,它们通过冒号(:)与成员声明分开,并应用于所有后续成员声明,直到下一个访问说明符为止

隐式this属于指针类型,因此要访问它的字段,请使用operator->

C ++类定义(或类说明符)语句不会由}终止,而是由以下;终止。您可以选择在终端;之前定义类类型的一个或多个变量。