静态成员变量的有关问题,int Data:a=10为什么非得在.cpp中初始化,能不能用extern解决这个有关问题

静态成员变量的问题,int Data::a=10为什么非得在.cpp中初始化,能不能用extern解决这个问题啊
//Data.h
class   Data
{
public:
static   int   GetData();
static   void   IcrData();
static   void   SetData(int);
private:
static   int   a;
};
//Data.cpp
int   Data::a=10;//这句移到Data.h文件中,程序就编译不过去,
int   Data::GetData()
{
return   a;
}
void   Data::IcrData()
{
a++;
}
void   Data::SetData(int   i)
{
a=i;
}
int   main()
{
return   0;
}

------解决方案--------------------
因为在h文件中其他文件也存在了int Data::a=10;这一句,所以就会冲突.
------解决方案--------------------
一般情况下 静态成员的初始化应放在cpp中 而不是h中
因为h可能被多个cpp包含(#include),这种情况下 如果是在h中初始化静态成员的 就会造成编译期间的“重定义”错误
------解决方案--------------------
int Data::a=10;//这句移到Data.h文件中,程序就编译不过去,

那样会造成重复的包含这份a的定义,造成错误

你想用extern int Data::a=10;放在头文件里,这也是不行的,因为这仍然是一份定义,而不是

声明了,仍然产生重复包含错误
------解决方案--------------------
记得是个规定就可以了。

------解决方案--------------------
以上回答都正确
------解决方案--------------------
上面回答的应该就是了。
在.h文件中定义的话,因为你给变量赋值了,是一个定义,而不是声明,会有重复定义错误。
定义会给变量分配空间,而声明不会。