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++ では、アクセス指定子( publicprotected、およびprivate) はmember-declarationの一部ではなく、member-specificationの一部です。したがって、それらはコロン ( ) によってメンバー宣言から分離され、次のaccess-specifierまで、:後続のすべてのメンバー宣言に適用されます。

暗黙的thisはポインター型であるため、そのフィールドにアクセスするには、を使用しますoperator->

C++ クラス定義 (またはclass-specifier ) ステートメントは、}ではなく、次の で終了します;。オプションで、端末の前に class-type の 1 つまたは複数の変数を定義できます;

于 2012-08-14T22:31:55.133 に答える