如何使用所有静态方法访问类中的静态成员?
我想拥有一组相关的函数,但是在调用这些函数之前还要初始化一些重要的数据成员。我认为只有静态成员的课程才有可能。 VS2008中的编译器不喜欢我试图访问“a”。
当然,我错过了一些小但仍然很困惑的东西。 :P (即使没有“a”的无效访问,从main调用testMethod()时也不会调用构造函数。
class IPAddressResolver
{
private:
public:
static int a;
IPAddressResolver();
static void TestMethod();
};
IPAddressResolver::IPAddressResolver()
{
IPAddressResolver::a = 0;
cout << "Creating IPAddressResolver" << endl;
}
void IPAddressResolver::TestMethod()
{
cout << "testMethod" << endl;
}
答案 0 :(得分:11)
您需要在函数之外定义静态数据成员,例如
class IPAddressResolver
{
private:
static int a;
IPAddressResolver();
public:
static void TestMethod();
};
int IPAddressResolver::a = 0;
void IPAddressResolver::TestMethod()
{
cout << "testMethod" << endl;
}
您的构造函数未被调用,因为您没有创建该类的新实例。对于静态实用程序类,您不需要实例,因此可以完全省略构造函数。或者,您可能希望声明它private
以明确表示该类不会被实例化(参见上文)。
注意:
public
字段,因此我将a
转为private
,答案 1 :(得分:2)
在类定义之外的某处,您需要定义和初始化与该类关联的静态数据成员。
最简单的就是放
int IPAddressResolver::a = 0;
答案 2 :(得分:2)
我想拥有一组相关的函数,但在调用任何这些函数之前还要初始化一些重要的数据成员
听起来像你想要一个Singleton,而不是只有静态成员的类。