C++类中static成员初始化的一个问题

zhqyzhqychn 2009-03-12 07:07:57
C++primer中提到:
只要初始化式是一个常量表达式,整型的const static数据成员就可以在类定义体中进行初始化,而且在类外定义时不必在指定初始化值:
例如

class test
{


public:

static const int i=5;

};
const int test::i;

但我的编译器为什么报错呢,(vc++6.0)
...全文
330 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
daniub 2010-07-11
  • 打赏
  • 举报
回复
编译器问题
shdongsichyang 2010-07-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hqin6 的回复:]
C/C++ code


g++:

1 #include <iostream>
2 using namespace std;
3
4 class A
5 {
6 public:
7 static const int sc_data = 5;
8 };
9 int main(……
[/Quote]
去掉const能运行吗?
k21w4 2009-03-13
  • 打赏
  • 举报
回复
编译器问题喽
wangl0320 2009-03-13
  • 打赏
  • 举报
回复
这个编译器比较烂
bfhtian 2009-03-13
  • 打赏
  • 举报
回复
多换几个编译器试试
sunnystone614 2009-03-13
  • 打赏
  • 举报
回复
编译器问题
joytony_888 2009-03-13
  • 打赏
  • 举报
回复
编译器不够标准,C++ PRIMER没有告诉你有些老编译器不支持一些新特性么.
na2650945 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hacker_sx 的回复:]
VC++6.0对标准化C++的兼容仅达83.43%。
不是说,书上所有的语言特性在所有编译器上都是得以满足的。
只是到特定的某些完全支持标准C++的编译器上才是可以实现的
http://baike.baidu.com/view/1576342.htm
[/Quote]
正解被。
chin_chen 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhqyzhqychn 的帖子:]
C++primer中提到:
只要初始化式是一个常量表达式,整型的const static数据成员就可以在类定义体中进行初始化,而且在类外定义时不必在指定初始化值:
例如
C/C++ codeclasstest
{public:staticconstinti=5;

};constinttest::i;
但我的编译器为什么报错呢,(vc++6.0)
[/Quote]
vc++6.0对编译器支持不好,建议别用了。
小强提包包 2009-03-12
  • 打赏
  • 举报
回复
静态变量的原则是类内声明,类外定义
所以在类内你可以这么写

static const int i;

类外
const int test::i = 0;

你得出错应该是归结于VC++对标准C++得不兼容性
yshuise 2009-03-12
  • 打赏
  • 举报
回复
#include "stdafx.h"
class test
{
public:
static const int i;
};
const test::i = 5;


int main(int argc, char* argv[])
{

return 0;
}

我刚才测试了一下,能在vc6.0运行。
s79947171 2009-03-12
  • 打赏
  • 举报
回复
换2005吧,你的编译器问题
Cpp权哥 2009-03-12
  • 打赏
  • 举报
回复
静态常量成员在类内部初始化,在外面就不要写
const int test::i;
这一行了。
shexinwei 2009-03-12
  • 打赏
  • 举报
回复
好像是这样讲的呀!UP!
hacker_sx 2009-03-12
  • 打赏
  • 举报
回复
VC++6.0对标准化C++的兼容仅达83.43%。
不是说,书上所有的语言特性在所有编译器上都是得以满足的。
只是到特定的某些完全支持标准C++的编译器上才是可以实现的
http://baike.baidu.com/view/1576342.htm
太乙 2009-03-12
  • 打赏
  • 举报
回复


g++:

1 #include <iostream>
2 using namespace std;
3
4 class A
5 {
6 public:
7 static const int sc_data = 5;
8 };
9 int main()
10 {
11 A a;
12 cout<<a.sc_data<<endl;
13 return 0;
14 }



$ g++ tes.cpp
$ ls
a.out* test.cpp
$ ./a.out
5

zhqyzhqychn 2009-03-12
  • 打赏
  • 举报
回复
换个编译器就好了,就连类外定义不要都可以了,呵呵,和标准都不一样啊

64,639

社区成员

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

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