我有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
的多个定义的错误。
我该怎么办?我在课程档案中加入了警卫。
答案 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;
...
}