-2

次のコードを見てください

GameObject.h

#pragma once
class GameObject
{
public: 
    GameObject(int);
    ~GameObject(void);


    int id;

private:
    GameObject(void);


};

ゲームオブジェクト.cpp

#include "GameObject.h"
#include <iostream>

using namespace std;

static int counter = 0;


GameObject::GameObject(void)
{
}

GameObject::GameObject(int i)
{
    counter++;
    id = i;
}


GameObject::~GameObject(void)
{
}

メイン.cpp

#include <iostream>
#include "GameObject.h"

using namespace std;

int main()
{
    //GameObject obj1;
    //cout << obj1.id << endl;

    GameObject obj2(45);
    cout << obj2.id << endl;;
//  cout << obj2.counter << endl;

    GameObject obj3(45);
    GameObject obj4(45);
    GameObject obj5(45);


    //Cannot get Static value here
    //cout << "Number of Objects: " << GameObject
    //

    system("pause");
    return 0;
}

ここでは、作成されたインスタンスの数を記録しようとしています。静的データ メンバーで実行できることはわかっていますが、Main メソッドを使用してアクセスすることはできません。助けてください!

PS:

ゲッターメソッドなしで直接アクセスしたい

4

3 に答える 3

2

のメンバーではないため、静的変数にcounterアクセスできませんGameObject。にアクセスする場合はcounter、次のようにする必要があります。

GameObject.h

#pragma once

class GameObject
{
public: 
    ...
    static int GetCounter();
    ...
};

ゲームオブジェクト.cpp

int GameObject::GetCounter()
{
    return counter;
}

次に、次のように変数にアクセスできます。

cout << "Number of Objects: " << GameObject::GetCounter();

もちろん、変数をクラスcounterの静的メンバーにするなど、静的変数にアクセスする方法は他にもありますGameObject(これをお勧めします)。

于 2012-12-04T14:09:47.307 に答える
0

コードでcounterは、クラスの静的メンバーではなく、古き良きグローバル変数です。ネット上のどこでも静的メンバー変数を宣言する方法を読むことができますが、ここにいくつかのスニペットがあります:

GameObject.h

#pragma once
class GameObject
{
public: 
    GameObject(void);
    GameObject(int);
    ~GameObject(void);

private:
    int id;

// static members
public: 
    static int counter; // <<<<<<<<<<< declaration
};

ameObject.cpp

#include "GameObject.h"

int GameObject::counter = 0; // <<<<<<<<<<< instantiation


GameObject::GameObject(void)
{
    counter++;
}

GameObject::GameObject(int i)
{
    counter++;
    id = i;
}


GameObject::~GameObject(void)
{
}

メイン.cpp

#include <iostream>
#include "GameObject.h"

using namespace std;

int main()
{
    GameObject obj2(45);
    cout << "version one: " << obj2.counter << endl;

    // second version:
    cout << "version two: " << GameObject::counter << endl;

    system("pause");
    return 0;
}

そのクラスのインスタンスで静的メンバーにアクセスする Afaik は正常に動作するはずですが、間違った印象を与えるため、バージョン 2 を使用する必要があります。

于 2012-12-04T14:23:59.370 に答える
-1

気にしないでください、私はゲッターメソッドでそれをしました。クロージングスレッド

于 2012-12-04T14:06:29.093 に答える