静态成员初始化问题

cismylife 2010-01-25 06:11:37
今天遇到这个问题,在深入浅出mfc中有这样一段话:。关于静态成员变量,你应该在实作档中且类别以外的任何位置设定其初值。例如在main 之中,或全域函数中,或任何函数之外。

#include <iostream>

using namespace std;
class A{
private:
static int a;
};
//int A::a=9;
int main()
{
int A::a=9;
return 0;
}

还有我想问什么叫全局函数
...全文
165 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovesi3344 2010-01-29
  • 打赏
  • 举报
回复
错了
今天晚上才发现自己错了
要加上::

我误导楼主了
悲剧

[Quote=引用 15 楼 gaoyugaoyugaoyu 的回复:]
引用 12 楼 lovesi3344 的回复:
int A::a=9;

改成 int a = 9;

静态变量是独立于任何一个类的 ,不用加作用域解析操作符(类限定符)::了
静态变量使得类的各个对象都只共享一个副本,它独立于任何一个类,应该不用再::了




正解,顶顶顶
[/Quote]
StephenGaoYu 2010-01-26
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lovesi3344 的回复:]
int A::a=9;

改成 int a = 9;

静态变量是独立于任何一个类的 ,不用加作用域解析操作符(类限定符)::了
静态变量使得类的各个对象都只共享一个副本,它独立于任何一个类,应该不用再::了


[/Quote]

正解,顶顶顶
flyerwing 2010-01-26
  • 打赏
  • 举报
回复
类内类外估计都行了!
febbird1984 2010-01-25
  • 打赏
  • 举报
回复
楼主可以参考下c++ primer中关于"域"的部分
lovesi3344 2010-01-25
  • 打赏
  • 举报
回复
int A::a=9;

改成 int a = 9;

静态变量是独立于任何一个类的 ,不用加作用域解析操作符(类限定符)::了
静态变量使得类的各个对象都只共享一个副本,它独立于任何一个类,应该不用再::了

huanyuxiake 2010-01-25
  • 打赏
  • 举报
回复
static是定义静态!!
未经初始化的静态变量会初始化为0.
静态变量是在正个文件中是可见的.而在文件之外是不可见的..

而且静态变量是不能声明的...只能在这个当前文件下使用
cismylife 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lovesi3344 的回复:]
在main中试要注意:不要再加上关键字static
在类内有static
在类外,包括main中就不要static了

引用 8 楼 cismylife 的回复:
书上说可以在main函数中,我就在main函数中试了试,可是编译错误

[/Quote]
没有加,跟我上面的代码一样,出错
lovesi3344 2010-01-25
  • 打赏
  • 举报
回复
在main中试要注意:不要再加上关键字static
在类内有static
在类外,包括main中就不要static了

[Quote=引用 8 楼 cismylife 的回复:]
书上说可以在main函数中,我就在main函数中试了试,可是编译错误
[/Quote]
cismylife 2010-01-25
  • 打赏
  • 举报
回复
书上说可以在main函数中,我就在main函数中试了试,可是编译错误
macrojj 2010-01-25
  • 打赏
  • 举报
回复
类外初始化
lovesi3344 2010-01-25
  • 打赏
  • 举报
回复
就是说在类外初始化呗

我看的是《C++ primer plus》,静态成员变量可以在类里面初始化的

全局函数就是说不局限于一个类的函数,是global的,也就是说不是任何一个类的成员函数
成员函数局限于某个类,在类外要用作用域解析操作符(类限定符)::指出成员函数所属的类
而全局函数不局限于某个类,因此定义时不能用::
cismylife 2010-01-25
  • 打赏
  • 举报
回复
关键是我在main里面初始化编译的时候错误,跟书上说的有冲突,为什么
stardust20 2010-01-25
  • 打赏
  • 举报
回复
全局函数有点类似于全局变量的东西。。。全局变量应该知道吧。。呵呵
darktop 2010-01-25
  • 打赏
  • 举报
回复
static 不是静态变量吗
昵称很不好取 2010-01-25
  • 打赏
  • 举报
回复
class CPublic
{
public:
CPublic();
virtual ~CPublic();

public:
static int x; //全局变量
static int time; //全局变量
static int f(int y); //全局函数
…………
}
冻结 2010-01-25
  • 打赏
  • 举报
回复
static int a;
这是一个声明。不能为其分配内存。

在类外提供定义式,就可以为其分配内存了。

全局函数,就是在所有类外定义的函数。

64,663

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧