4

如何使用所有静态方法访问类中的静态成员?

我想有一组相关的函数,但也有一些重要的数据成员在调用任何这些函数之前初始化。我认为只有静态成员的类将是要走的路。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;
}
4

3 回答 3

11

您需要在函数之外定义静态数据成员,例如

class IPAddressResolver
{
private:
    static int a;
    IPAddressResolver();
public:
    static void TestMethod();
};

int IPAddressResolver::a = 0;

void IPAddressResolver::TestMethod()
{
    cout << "testMethod" << endl;
}

您的构造函数没有被调用,因为您没有创建该类的新实例。对于静态实用程序类,您不需要实例,因此您可以完全省略构造函数。或者,您可能希望声明它private以明确表示不应实例化该类(见上文)。

笔记:

  • 不建议public在类中使用字段,所以我变成aprivate
  • 静态实用程序类通常是无状态的,因此如果您需要在类中包含字段,这可能表明该类最好是Singleton
于 2010-06-07T20:36:29.493 回答
2

在类定义之外的某个地方,您需要定义和初始化与该类关联的静态数据成员。

最简单的就是放

int IPAddressResolver::a = 0;

在您的 IPAddressResolver.cpp 文件中。

于 2010-06-07T20:42:11.757 回答
2

我想要一组相关的函数,但在调用这些函数中的任何一个之前初始化一些重要的数据成员

听起来你想要一个单例,而不是只有静态成员的类。

于 2010-06-07T20:42:34.110 回答