首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-01 
静态成员变量的问题,int Data::a10为什么非得在.cpp中初始化,能不能用extern解决这个问题啊//Data.hclass

静态成员变量的问题,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文件中定义的话,因为你给变量赋值了,是一个定义,而不是声明,会有重复定义错误。
定义会给变量分配空间,而声明不会。

热点排行