static成员变量初始化问题

时间:2021-06-23 03:49:37
侯俊杰深入浅出中说:

static成员变量不该在构造函数中,不该在头文件中,“你应该在应用程序文件中,类以为的任何位置设定其初值,例如在main之中,或全局函数中,或任何函数之外”

------------------

我的问题是:写程序试了一下,似乎不可以在main中初始化,请大家看看。
class C{
public:
static int m_c;
};


void main()
{
     int C::m_c=1; // error C2655: 'm_c' : definition or redeclaration illegal in current scope

}

8 个解决方案

#1


没试过,楼主真是细心啊。呵呵。偶一般放在函数之外

#2


换成这样试一下
void main()
{
     C::m_c=1; // error C2655: 'm_c' : definition or redeclaration illegal in current scope

}

#3


类中静态变量初始化要放在类的外面.因为静态变量放在静态存储区,需要在编译时确定.

#4


楼主大大:
你程序是不是写错了?
应该不能又在main主函数中又声明:
int C::m_c=1;????

#5


class C{
public:
static int m_c;
};
int C::m_c;   //必须加的.

void main()
{
      C::m_c=1; //这是设直. 你给的是定义.当然出错了.
}

#6


侯俊杰说,static成员变量实际上是在初始化的时候(而不是在类申明中)才定义出来

但是似乎不能在main中初始化哦。。。。。。。难道他说错了????

#7


class A
{
public:
static int i;
A()
{

}
};
int A::i = 1;
void main()
{
A a;
a.i = 1;
cout<<a.i;
return;
}

#8


类的静态成员是所有实体共享的,这一点要注意
class A
{
public:
static int i;
A()
{

}
};
int A::i = 1;
void main()
{
A a;
A a1;
a.i = 2;
cout<<a.i<<endl;
cout<<a1.i;
return;
}
//输出结果都是2

#1


没试过,楼主真是细心啊。呵呵。偶一般放在函数之外

#2


换成这样试一下
void main()
{
     C::m_c=1; // error C2655: 'm_c' : definition or redeclaration illegal in current scope

}

#3


类中静态变量初始化要放在类的外面.因为静态变量放在静态存储区,需要在编译时确定.

#4


楼主大大:
你程序是不是写错了?
应该不能又在main主函数中又声明:
int C::m_c=1;????

#5


class C{
public:
static int m_c;
};
int C::m_c;   //必须加的.

void main()
{
      C::m_c=1; //这是设直. 你给的是定义.当然出错了.
}

#6


侯俊杰说,static成员变量实际上是在初始化的时候(而不是在类申明中)才定义出来

但是似乎不能在main中初始化哦。。。。。。。难道他说错了????

#7


class A
{
public:
static int i;
A()
{

}
};
int A::i = 1;
void main()
{
A a;
a.i = 1;
cout<<a.i;
return;
}

#8


类的静态成员是所有实体共享的,这一点要注意
class A
{
public:
static int i;
A()
{

}
};
int A::i = 1;
void main()
{
A a;
A a1;
a.i = 2;
cout<<a.i<<endl;
cout<<a1.i;
return;
}
//输出结果都是2