1

静的変数のリンクに問題があります。静的変数を使用しようとしたのはこれが初めてです。ベクトルを作成していますが、すべての Student オブジェクトで cnt 変数を静的にしたいと考えています。

私はこれを理解しようとして周りを検索しました。私は、静的変数を宣言しておらず、静的変数専用の新しいオブジェクトを作成する必要があるというこの問題を抱えている他の人を読みました。

コンストラクターで sCnt 変数が宣言され、設定されていると思いました。クラスに静的メンバー変数を実装する適切な方法は何ですか?

Student.h

#pragma once
#include <iostream>

using namespace std;

class Student
{
public:
    Student();
    Student(string ID);
    virtual ~Student(void);
    void cntReset();
    int getCnt() const;
    int getID() const;
    bool operator< (const Student& s) const;
    bool operator== (const Student& s) const;

protected:
    int id;
    static int sCnt;

private:
};

学生.cpp

#include "Student.h"

Student::Student()
{
    id = 0;
    sCnt = 0;
}

Student::Student(string ID)
{
    id = atoi(ID.c_str());
    sCnt = 0;
}
4

1 に答える 1

5

一度だけ定義する必要があります。以下を cpp ファイルに追加します。

int Student::sCnt = 0; // Note the ' = 0' is optional as statics are
                       // are zero-initialised.

インスタンスの数をカウントすることになっていると仮定すると、コンストラクターでStudent設定せず、インクリメントし、デストラクタでデクリメントします。0StudentStudent

于 2012-05-20T21:08:12.273 に答える