首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于类的静态成员有关问题

2012-02-05 
关于类的静态成员问题这2天看C++Primer题解发现里面有大概这样的代码classA{....private:staticconstintde

关于类的静态成员问题
这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分   ,鼓励下

[解决办法]
基本型别(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;
}


------解决方案--------------------


刚才试了一下,vc6确实不行,vs2005就可以
想想在vc6下一个const成员变量该如何赋值呢...vc6对C++标准支持的确实比较差
另外给分是点帖子右上角的管理

热点排行