关于类的静态成员问题

figure99hehe 2007-08-07 02:20:25
这2天看 C++ Primer题解 发现里面有大概这样的代码
class A{
....
private:
static const int defaultrows=10;
....
};
我以前在类里给成员变量赋值都是错的阿,带着好奇我去试验了下,结果还是错的
error:
C:\test\MATRIX.CPP(8) : error C2252: 'defaultrows' : pure specifier can only be specified for functions
我用的是VC6.0
所以请问是书上错了,还是和编译器相关或其他原因?我以前是这样给静态成员赋值的
A::defaultrows=10;

另外CSDN真的很难注册阿,这个还是找人注册的我的机子就是注册不了,第一次问问题在本论坛 ,呵呵就10分 ,鼓励下
...全文
228 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
figure99hehe 2007-08-08
  • 打赏
  • 举报
回复
暑假努力学习中,C++ 学的一般 ,现在在看windows API 大家多多指教
星羽 2007-08-07
  • 打赏
  • 举报
回复
UP

fish6344 2007-08-07
  • 打赏
  • 举报
回复
在类内部对静态常量作初始化这是语言特性允许的也是C++98标准所支持的,VC6在这方面表现不佳,是因为VC在对C++标准的支持方面,历来就有欠缺。
hoya5121 2007-08-07
  • 打赏
  • 举报
回复
刚才试了一下,vc6确实不行,vs2005就可以
想想在vc6下一个const成员变量该如何赋值呢...vc6对C++标准支持的确实比较差
另外给分是点帖子右上角的管理
bombwang 2007-08-07
  • 打赏
  • 举报
回复
vc6有很多东西都不支持的
alq974120alq 2007-08-07
  • 打赏
  • 举报
回复
const float CTest::m_f = (float)1.234;
可以换成
const float CTest::m_f = 1.234f;
VC是这样的。
figure99hehe 2007-08-07
  • 打赏
  • 举报
回复
谢谢大家的回答,看完cppgp的帖子基本明白了,但也又想问问题了: C++ 程序 在不同操作系统下的 编译 有什么不同? 还有怎么给你们分啊?
alq974120alq 2007-08-07
  • 打赏
  • 举报
回复
学习,路过。
channey007 2007-08-07
  • 打赏
  • 举报
回复
对于static const变量只有泛整形类型才可以直接在类声明中赋值。
tsubor 2007-08-07
  • 打赏
  • 举报
回复
const static 变量可以在类里面进行初始化
cppgp 2007-08-07
  • 打赏
  • 举报
回复
基本型别(char/int/float/double及其对应无符号型别)的常量(const)静态(static)成员可以在类里面赋值,但是vc6.0不支持,以下程序保存为test.cpp在 linux下用 g++编译通过:
编译命令:g++ -o test test.cpp -lgcc_s
运行命令:./test
运行结果:
CTest Value :
int m_i = 10
char m_c = A
float m_f = 1.234
double = 1.23
源代码:
#include <iostream>
#include <string>
using namespace std;

class CTest
{
public:
static const int m_i = 10;
static const char m_c = 'A';
static const float m_f = 1.234;
static const double m_d = 1.23;
// static const char* m_cstr = "bbb"; //不支持
// static const string m_str = "aaa"; //不支持
};

const int CTest::m_i;
const char CTest::m_c;
const float CTest::m_f;
const double CTest::m_d;
//const string CTest::m_str;
//const char* CTest::m_cstr;

int main()
{
cout<<"CTest Value :\r\n\t"
<<"int m_i = "<<CTest::m_i
<<"\r\n\tchar m_c = "<<CTest::m_c
<<"\r\n\tfloat m_f = "<<CTest::m_f
<<"\r\n\tdouble = "<<CTest::m_d<<endl;
return 0;
}


我们可以换用一个方式让vc和g++都支持,且支持非基本型别:
编译命令:,vc如何编译lz知道,,呵呵~ linux下命令: g++ -o test test.cpp -lgcc_s
运行命令:./test
运行结果:
CTest Value :
int m_i = 10
char m_c = A
float m_f = 1.234
double = 1.23
str = bbb
cstr = aaa
源代码:
#include <iostream>
#include <string>
using namespace std;

class CTest
{
public:
static const int m_i;
static const char m_c;
static const float m_f;
static const double m_d;
static const char* m_cstr;
static const string m_str;
};

const int CTest::m_i = 10;
const char CTest::m_c = 'A';
//注意下行:vc下因为默认是double,所以强制型别转换,否则发警告,vc真TMD的菜!!当然,linux下不需要强制转换
const float CTest::m_f = (float)1.234;
const double CTest::m_d = 1.23;
const string CTest::m_str = "bbb";
const char* CTest::m_cstr = "aaa"; //只是举例,建议千万别这么用cstr!

int main()
{
cout<<"CTest Value :\r\n\t"
<<"int m_i = "<<CTest::m_i
<<"\r\n\tchar m_c = "<<CTest::m_c
<<"\r\n\tfloat m_f = "<<CTest::m_f
<<"\r\n\tdouble = "<<CTest::m_d
<<"\r\n\tstr = "<<CTest::m_str
<<"\r\n\tcstr = "<<CTest::m_cstr<<endl;
return 0;
}

taodm 2007-08-07
  • 打赏
  • 举报
回复
既然在看C++ Primer,就扔了VC6,换VC2005express或者devcpp
妍妍 2007-08-07
  • 打赏
  • 举报
回复
static const和static变量是不同的
www_adintr_com 2007-08-07
  • 打赏
  • 举报
回复
泛整数类型的可以直接赋值,其它类型的不行。

64,683

社区成员

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

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