C++ 使用C++;跨多个文件初始化

C++ 使用C++;跨多个文件初始化,c++,class,C++,Class,我的A级成绩如下: 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级成绩如下:

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
的多个定义的错误

我应该如何进行?我在类文件周围包含了防护装置。

您希望在头文件中声明
a::I
(并且您可以去掉
初始化()

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

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

然后,在要使用类对象的任何位置都包含头文件,只需编译.CPP文件并将其与使用该类的其他文件链接。

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

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

我在类的末尾添加了initated int A::I=0..只是错过了这里谢谢..在我的代码中发现了另一个错误..我做的愚蠢的事情是在头文件中给出函数defn..这再次导致了问题,因为相同的defn被包含在两个c文件中..你是正确的,相应地修改了它。这给了关于这个问题的详细情况。
  class A{
      static const int i = 0;
      ...
  }