2010-06-07 91 views
3

如何使用所有静态方法访问类中的静态成员?静态类数据成员和构造函数

我想要一组相关函数,但也有一些重要的数据成员在任何这些函数被调用之前被初始化。我认为只有静态成员的课程才是最佳选择。编译器在VS2008不喜欢我试图访问“一个”。

当然,我失去了一些小东西,但仍然很困惑。 :P。 (即使没有调用从主TestMethod的()当“a”的构造不叫非法访问

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

您需要使用您收到的错误来限定此问题。这几乎肯定是一个未解决的外部链接器错误,彼得的答案是正确的。尽管如此,你应该用相关信息来限定你的问题。 – 2010-06-08 00:32:54

回答

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
+0

啊。我完全忘记了这一点。 :P 一直在使用C#太久。 – bobber205 2010-06-07 20:42:14

+0

有没有一种方法可以正确使用此方法以外的成员?我想在C#中使用像你一样的构造函数。 – bobber205 2010-06-07 20:42:55

+0

@bobber,'int IPAddressResolver :: a = 0;'将'a'初始化为'0'。如果你想要一个构造函数,就像我在笔记中暗示的那样考虑Singleton方法。 – 2010-06-07 20:46:34

2

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

最简单的就是把

int IPAddressResolver::a = 0; 

在IPAddressResolver.cpp文件。

2

我想有一组相关的功能,但也有一些重要的数据成员初始化任何调用这些函数之前

听起来像你对我想要一个Singleton,不是只有静态成员类。

相关问题