0

私のタイトルに記載されているように、コード内の静的メソッドを使用してファイルをコンパイルしようとしています。私computeCivIndex()はユーザーから5つの入力を取得して計算を行い、float値を返そうとしています。

this.sunTypeはJava構文用ですが、V ++の場合、両方が同じ名前の場合、それらをリンクするために何を使用する必要がありますか?

コードにgetterメソッドとsetterメソッドがあり、2つのコンストラクターが長すぎて投稿できません。

これは私のエラーです:

test.cpp:159: error: cannot declare member function ‘static float LocationData::computeCivIndex(std::string, int, int, float, float)’ to have static linkage
test.cpp: In static member function ‘static float LocationData::computeCivIndex(std::string, int, int, float, float)’:
test.cpp:161: error: ‘this’ is unavailable for static member functions

コード:

class LocationData
{   
    private:
    string sunType;
    int noOfEarthLikePlanets;
    int noOfEarthLikeMoons;
    float aveParticulateDensity;
    float avePlasmaDensity;
    public:
    static float computeCivIndex(string,int,int,float,float);
};
static float LocationData::computeCivIndex(string sunType, int noOfEarthLikePlanets,int     noOfEarthLikemoons, float aveParticulateDensity, float avePlasmaDensity)
{
    this.sunType = sunType;
    this.noOfEarthLikePlanets = noOfEarthLikePlanets;
    this.noOfEarthLikeMoons = noOfEarthLikeMoons;
    this.aveParticulateDensity = aveParticulateDensity;
    this.avePlasmaDensity = avePlasmaDensity;
    if(sunType == "Type O")
         //and more for computation
}
4

2 に答える 2

3

static宣言はstatic実装を延期します。静的実装とは、関数シンボルが実装されているファイル内でのみ使用できることを意味します。

関数を実装する前に、静的なものを削除するだけです。さらに、静的関数はクラス関数であり、その中のクラスの非静的メンバーにアクセスすることはできません。これらはオブジェクトインスタンスなしで使用されることを意図しているため、インスタンス変数はありません。

float LocationData::computeCivIndex(string sunType, int noOfEarthLikePlanets,int     noOfEarthLikemoons, float aveParticulateDensity, float avePlasmaDensity)
{
}
于 2012-10-16T12:46:52.673 に答える
2

コンパイラエラーは私にはかなり明白に思えます:

エラー:「this」は静的メンバー関数には使用できません

基本的に、メンバーはstaticであるため、その型の特定のインスタンスのコンテキスト内では実行されません。したがってthis、メソッド内で使用することは無意味です。を使おうとするthis、エラーが発生します。

次のMSDNドキュメントからstatic

クラス宣言でメンバー関数を宣言する場合、staticキーワードは、関数がクラスのすべてのインスタンスで共有されることを指定します。関数には暗黙のthisポインターがないため、静的メンバー関数はインスタンスメンバーにアクセスできません。インスタンスメンバーにアクセスするには、インスタンスポインタまたは参照であるパラメータを使用して関数を宣言します。

メンバーを静的であると宣言したくないようです。

(余談ですが、「クラスのすべてのインスタンスで共有されている」という説明は好きではありません。クラスの特定のインスタンスに固有ではないという考えが好きです。インスタンスを作成する必要はありません。 、まったく。)

于 2012-10-16T12:47:22.437 に答える