• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: 小 中 大 | 推荐给好友 上一篇 | 下一篇

初学者

发布: 2007-7-01 20:40 | 作者: admin | 来源: | 查看: 30次 | 进入软件测试论坛讨论

领测软件测试网

今天在读《Thinking in C++》时发现一个以前使用C++中const的一个当时是在读《Essential C++》中的一个示例时出现的问题的原因,在类中定义一个常量,使用VC无论如何也编译不过去。

例如:

#include <iostream>
using namespace std;

void main()
{
 const int i = 56 ;

 cout<<i<<endl;
}

但是我们不能在类中定义常量,有两种情况:
1、

#include <iostream>
using namespace std;

class CTemp
{
public:
 const int i = 1 ;
};

void main()
{
 const int i = 56 ;

 cout<<i<<endl;
}
错误提示如下:
error C2258: illegal pure syntax, must be ´= 0´
error C2252: ´i´ : pure specifier can only be specified for functions

2、根据第一个错误,我们把i值设为0

#include <iostream>
using namespace std;

class CTemp
{
public:
 const int i = 0 ;
};

void main()
{
 const int i = 56 ;

 cout<<i<<endl;
}
错误提示如下:
error C2252: ´i´ : pure specifier can only be specified for functions

MSDN提示错误C2252如下:´identifier´ : pure specifier can only be specified for functions

《C++编程思想》解释如下:因为在类对象里进行了存储空间分配,编译器不能知道const的内容是什么,所以不能把它用做编译期间的常量。                         这意味着对于类里的常数表达式来说,const就像它在C中一样没有作用。
在结构体中与在类中相同:

#include <iostream>
using namespace std;

struct Temp
{
 const int i = 0 ;
}tem;

void main()
{
 const int i = 56 ;

 cout<<i<<endl;
}

解决办法是使用不带实例的无标记的枚举(enum),因为枚举的所有值必须在便宜时建立,它对类来说是局部的,但常数表达式能得到它的值
#include <iostream>
using namespace std;

class CTemp
{
private:
 enum{i = 0 };
};
void main()
{
 const int i = 56 ;

 cout<<i<<endl;
}
一切OK


文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:[email protected] 电话:010-51297073

软件测试 | 领测国际 | ISTQB | ISTQB官网 | TMMi | TMMi认证 | 国际软件测试工程师认证 | 领测软件测试网