对于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 * 来指代?
如果是这样该用什么?

解决方案 »

  1.   

    static char recvBuf[100]; 
    static char tempBuf[100];
    char * CmfcenglishDlg::recvBuf = NULL;  //3
    char * CmfcenglishDlg::tempBuf = NULL;  //4
    不一样的
      

  2.   

    一个是 char [] 一个是char* 
      

  3.   

    SOCKET CmfcenglishDlg::m_socket = INVALID_SOCKET;       //1
    SOCKET CmfcenglishDlg::m_sockConn = INVALID_SOCKET;     //2
    char CmfcenglishDlg::recvBuf[100] = {0};  //3
    char CmfcenglishDlg::tempBuf[100] = {0};  //4
      

  4.   

    SOCKET CmfcenglishDlg::m_socket;       //1
    SOCKET CmfcenglishDlg::m_sockConn;     //2
    char     CmfcenglishDlg::recvBuf[100] = {0};  //3
    char      CmfcenglishDlg::tempBuf[100] ={0};  //4
      

  5.   

    char CmfcenglishDlg::recvBuf[100] ;  // = "test"
    char CmfcenglishDlg::tempBuf[100] ;  // = "test"
      

  6.   

    为什么 1、2在没有 =INVALID_SOCKET的情况下也是行的。难道可以不初始化?
      

  7.   

    SOCKET 其实就是int 
    编译器会给他默认值的 ,debug下是 release 下 随机
      

  8.   

    INVALID_SOCKET 也就是-1, 是一个数字
      

  9.   

    char数组跟char指针是不一样的, 初始化也不同
      

  10.   

    初始化了,
    typedef u_int           SOCKET;
      

  11.   

    部长,我问的是:
    SOCKET CmfcenglishDlg::m_socket ; //1
    SOCKET CmfcenglishDlg::m_sockConn; //2
    这样也是正确的,为什么?
      

  12.   

    static int没必要初始化
      

  13.   

    SOCKET CmfcenglishDlg::m_socket = INVALID_SOCKET; //1
    SOCKET CmfcenglishDlg::m_sockConn = INVALID_SOCKET; //2
    char CmfcenglishDlg::recvBuf[100] = {0}; //3
    char CmfcenglishDlg::tempBuf[100] = {0}; //4
      

  14.   


    编译器会给他自动赋值 releae下是0