请查看以下代码
GameObject.h
#pragma once
class GameObject
{
public:
GameObject(int);
~GameObject(void);
int id;
private:
GameObject(void);
};
GameObject.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)
{
}
Main.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:
我正在寻找直接访问,没有getter方法
答案 0 :(得分:2)
您的静态变量counter
无法访问,因为它不是GameObject
的成员。如果您想访问counter
,则需要执行以下操作:
<强> GameObject.h 强>
#pragma once
class GameObject
{
public:
...
static int GetCounter();
...
};
<强> GameObject.cpp 强>
int GameObject::GetCounter()
{
return counter;
}
然后您可以访问变量,如:
cout << "Number of Objects: " << GameObject::GetCounter();
当然,还有其他方法可以访问静态变量,例如使counter
变量成为GameObject
类的静态成员(我建议)。
答案 1 :(得分: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)
{
}
<强> Main.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 :(得分:-1)
没关系,我用一个getter方法做到了。关闭线程