对于vc的静态数据成员的初始化有点疑问:述:按照标准C++的语法,类的静态数据成员需要在类外进行初始化,并进行赋值。下面是我在一个类里定义的四个静态数据成员:static SOCKET m_socket;
static SOCKET m_sockConn;
static char recvBuf[100];
static char tempBuf[100];
我在类外的初始化如下:SOCKET CmfcenglishDlg::m_socket; //1
SOCKET CmfcenglishDlg::m_sockConn; //2
char * CmfcenglishDlg::recvBuf = NULL; //3
char * CmfcenglishDlg::tempBuf = NULL; //4编译的结果是 3、4是重复定义,1、2是没有错误的。1、2并没有给它赋值啊,怎么能行,我昨天给1、2赋了NULL,编译报错。??
按照初始化的规则: <类型> 类名:成员=<值> 3和4是完全可以的,难道是char [100]不能用char * 来指代?
如果是这样该用什么?
static SOCKET m_sockConn;
static char recvBuf[100];
static char tempBuf[100];
我在类外的初始化如下:SOCKET CmfcenglishDlg::m_socket; //1
SOCKET CmfcenglishDlg::m_sockConn; //2
char * CmfcenglishDlg::recvBuf = NULL; //3
char * CmfcenglishDlg::tempBuf = NULL; //4编译的结果是 3、4是重复定义,1、2是没有错误的。1、2并没有给它赋值啊,怎么能行,我昨天给1、2赋了NULL,编译报错。??
按照初始化的规则: <类型> 类名:成员=<值> 3和4是完全可以的,难道是char [100]不能用char * 来指代?
如果是这样该用什么?
解决方案 »
- MFC 关于使用EDIT控件的问题
- 在windows操作系统中关于按下alt + tab 这个组合键出现的面板
- 请帮忙看一下这个自定义消息无法执行
- 在VC++中如何捕获异常???
- 跪求, 类似于聊天室功能的RichEdit,当鼠标移到用户名部分时,用户名加下划线,当单击此用户名时,自己弹出一个对话框
- 100分求解:HTTP协议问题
- 关于CBitmapButton的问题
- VC中如何实现一个控件类似DELPHI/C++B的Anchors功能,就是窗口大小改变,窗口中的控件位置也做相应改变,
- 如何在视类德ondraw函数中打印Doc类的double或者int成员(菜鸟级问题)
- 这次不在黄牛,真的加分——求教CFile类中改文件名
- 关于CInternetSession、CHttpConnection、CHttpFile的使用问题。
- VC下面有没有iconv函数,来实现多语言转换的?
static char tempBuf[100];
char * CmfcenglishDlg::recvBuf = NULL; //3
char * CmfcenglishDlg::tempBuf = NULL; //4
不一样的
SOCKET CmfcenglishDlg::m_sockConn = INVALID_SOCKET; //2
char CmfcenglishDlg::recvBuf[100] = {0}; //3
char CmfcenglishDlg::tempBuf[100] = {0}; //4
SOCKET CmfcenglishDlg::m_sockConn; //2
char CmfcenglishDlg::recvBuf[100] = {0}; //3
char CmfcenglishDlg::tempBuf[100] ={0}; //4
char CmfcenglishDlg::tempBuf[100] ; // = "test"
编译器会给他默认值的 ,debug下是 release 下 随机
typedef u_int SOCKET;
SOCKET CmfcenglishDlg::m_socket ; //1
SOCKET CmfcenglishDlg::m_sockConn; //2
这样也是正确的,为什么?
SOCKET CmfcenglishDlg::m_sockConn = INVALID_SOCKET; //2
char CmfcenglishDlg::recvBuf[100] = {0}; //3
char CmfcenglishDlg::tempBuf[100] = {0}; //4
编译器会给他自动赋值 releae下是0