在多个文件中使用C ++类的静态变量

时间:2012-03-30 09:34:10

标签: c++ class

我有A级,这样:

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

void initialize() {
  A::i = 0;
}

在头文件中。

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

当我尝试在文件三中创建A的另一个对象时,编译器会抱怨 说"没有提及A类和#34;。所以在第三个文件中包含了标题。

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

我该怎么办?我在课程档案中​​加入了警卫。

2 个答案:

答案 0 :(得分: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文件并将其与使用此类的其他文件链接。

答案 1 :(得分:0)

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

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