1

以下处理/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

上下文是一个处理项目,并且 SensorData 类被用作同一项目文件夹中的草图对象。

4

3 回答 3

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;
  }
}
于 2012-08-14T22:32:14.507 回答
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++ 书。

于 2012-08-14T22:32:19.533 回答
0

第一个问题是它不是 C++。

在 C++ 中,访问说明符public、、protectedprivate)不是成员声明的一部分,而是成员规范的一部分。因此,它们通过冒号 ( ) 与成员声明:分开,并适用于所有后续成员声明,​​直到下一个访问说明符

隐式this是指针类型,因此要访问它的字段,您可以使用operator->.

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

于 2012-08-14T22:31:55.133 回答