ITPub博客

首页 > IT职业 > IT生活 > 初学者 (转)

初学者 (转)

原创 IT生活 作者:gugu99 时间:2007-10-16 08:29:01 0 删除 编辑
初学者 (转)[@more@]

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

例如:

#include
using namespace std;

void main()
{
 const int i = 56 ;

 cout<}

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

#include
using namespace std;

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

void main()
{
 const int i = 56 ;

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

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

#include
using namespace std;

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

void main()
{
 const int i = 56 ;

 cout<}
错误提示如下:
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
using namespace std;

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

void main()
{
 const int i = 56 ;

 cout<}

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

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

 cout<}
一切OK


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10748419/viewspace-976897/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    3122
  • 访问量
    2226175