2012-03-30 76 views
1

我有A级,使得:使用C++类的静态变量在多个文件

class A { 
    static int i; 
    A(); 
    f1(); 
    f2(); 
    static void intitiaize(); 
    // snipped rest 
} 

void initialize() { 
    A::i = 0; 
} 
在头文件

我有一个初始化第二个文件main方法中的 静态变量的类的初始化函数。在此之后,我创建了 A的对象以致电a.f1()

当我尝试在文件3中创建A的另一个对象时,编译器会抱怨 说“没有对类A的引用”。所以在第三个文件中包含了头文件。

我收到有关A的多个定义的错误。

我该如何继续?我已经在班级文件中加入了警卫。

+0

我已经加入发起的INT A ::我= 0类..just的最终错过了它在这里 – 2012-03-30 09:36:59

回答

2

你想要的A::i在头一个声明(你可以摆脱你的initialize()的:

//whatever.h: 
class A{ 
    static int i; 
    A(); 
    f1(); 
    f2(); 
    ... 
}; // don't forget the semicolon on the end. 

然后,你需要在一个CPP文件中的变量的定义:

// whatever.cpp: 
int A::i = 0; 

然后在你要使用类的对象的地方包含标题,然后编译.CPP文件并将它与其他使用此类的其他程序链接起来。

+0

感谢..又发现一个错误ñ我的代码..和愚蠢的事情,我必须做的是给函数defn在头文件..这再次造成问题,因为相同的defn被包括在两个c文件中。 – 2012-03-30 09:53:37

0

使用const整数可以实际在标题中初始化它。这包括bool和char类型。杰里的方法将适用于任何类型,如果它不是常量。

class A{ 
     static const int i = 0; 
     ... 
    } 
+0

你是对的,相应地改变它。这[问题](http://stackoverflow.com/questions/185844/initializing-private-static-members)给出了关于这个问题的更多细节。 – kossmoboleat 2012-03-30 16:13:50