0

静的手段という用語とその仕組みを理解するのに苦労しています。ここでは、静的変数「フロート パーセンテージ」を初期化しました。convertToPercent() を使用してパーセンテージに変換する必要があり、変換後、値を取得して値を someMethod () に入れて計算を行う必要があります

以下は私が持っているものです

.h

class Foo     {

private:
    static float percentage;

public :    
    float convertToPercent();

};

.cpp

float Foo::convertToPercent() {
             percentage = (30/100) * 100;
          return percentage;
}

static float someMethod () {
  //place the static percentage value here after doing convertToPercent() method to do some calculation;
}

ただし、エラーメッセージが表示されます

Undefined symbols for architecture x86_64:
"Foo::percentage", referenced from:
 Foo::convertToPercent() in Foo.o

与えられた助けに感謝します。ありがとう

4

5 に答える 5

4

staticこのコンテキストでは、変数percentageがクラス Foo の特定のインスタンスに属しておらず、代わりに Foo のすべてのインスタンス間で共有されていることを意味します。

リンカーが変数について知るためには、変数を宣言するだけでなく定義する必要があるため、エラーが発生します。

置く

float Foo::percentage = 0;

あなたの.cppファイルで

于 2013-10-09T09:19:03.693 に答える
2

クラス外で静的変数を定義する必要があります。

// header file
class Foo     {
private:
    static float percentage;
};

// cpp file
float Foo::percentage(0.0);

メンバー変数は静的であるため、プロセスの実行中に Foo クラスのすべてのインスタンス (すべての Foo オブジェクト) で共有されるこの変数の値は 1 つだけです。例えば。3 つの Foo オブジェクト A、B、C がある場合、オブジェクト B のパーセント値を変更すると、オブジェクト A と C でも値が変更されます。

于 2013-10-09T09:18:15.190 に答える
0

以下のコードは、静的メンバー変数のパーセンテージを宣言しようとしています --- OKAY

// header file
class Foo     
{
    private:
        static float percentage;       //constant declaration 
};

以下のコードは、まだ定義されていないオブジェクト (パーセンテージ) に値を割り当てようとします。 - よくない

// cpp file
float Foo::convertToPercent() {
         percentage = (30/100) * 100;     //tring to update percentage which is not defined yet.
      return percentage;                 //usage of object (percentage) which is not defined yet.
}

C++ では、使用するものすべてに対して定義を提供する必要がありますが、静的で整数型のクラス固有の定数は例外です。それらのアドレスを取得しない限り、それらを宣言し、定義を提供せずに使用できます。

あなたの場合、実装ファイル(.cpp)には以下の行が含まれている必要があり、該当する場合は「パーセンテージ」定数を使用できます。

float Foo::percentage(0.0);     //definition of static class member : percentage
于 2013-10-09T09:45:19.260 に答える