void CSelectServerDlg::DoExceCmd(vector<SSocketInfo> & VecSockInfo, int nIdx)
{
SSocketInfo *SockInfo = &VecSockInfo[nIdx];
switch(SockInfo->cmd.CommandID)
{
case CMD_AUTHEN:
{
DoAuthen(SockInfo->sock, SockInfo->data,SockInfo->cmd.DataSize);
break; }
case CMD_GETFILE:
{
DoGetFile(SockInfo->sock, SockInfo->data,SockInfo->cmd.DataSize);
break;
} case CMD_REGISTER:
{
DoRegister(SockInfo->sock, SockInfo->data,SockInfo->cmd.DataSize);
break;
} default:
break;
}
//执行完命令后就设置回接收指令状态
SockInfo->eCurOp = RecvCmd;
}
以上代码在VS2005环境无法编译通过:
SelectServerDlg.cpp
.\SelectServerDlg.cpp(214) : error C2143: 语法错误 : 缺少“:”(在“;”的前面)
.\SelectServerDlg.cpp(214) : error C2143: 语法错误 : 缺少“;”(在“:”的前面)
.\SelectServerDlg.cpp(215) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
.\SelectServerDlg.cpp(220) : error C2143: 语法错误 : 缺少“:”(在“;”的前面)
.\SelectServerDlg.cpp(220) : error C2143: 语法错误 : 缺少“;”(在“:”的前面)
.\SelectServerDlg.cpp(221) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
.\SelectServerDlg.cpp(226) : error C2143: 语法错误 : 缺少“:”(在“;”的前面)
.\SelectServerDlg.cpp(226) : error C2143: 语法错误 : 缺少“;”(在“:”的前面)
.\SelectServerDlg.cpp(227) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
同样的代码在VC6.0就OK!最近才换IDE,希望高手指点下!

解决方案 »

  1.   

    把break;放到大括号外边。
    void CSelectServerDlg::DoExceCmd(vector <SSocketInfo> & VecSockInfo, int nIdx)
    {
        SSocketInfo *SockInfo = &VecSockInfo[nIdx];
        switch(SockInfo->cmd.CommandID)
        {
        case CMD_AUTHEN:
            {
                DoAuthen(SockInfo->sock, SockInfo->data,SockInfo->cmd.DataSize);
            }
            break;
        case CMD_GETFILE:
            {
                DoGetFile(SockInfo->sock, SockInfo->data,SockInfo->cmd.DataSize);
            }
            break;    case CMD_REGISTER:
        {
            DoRegister(SockInfo->sock, SockInfo->data,SockInfo->cmd.DataSize);
        }
        break;    default:
            break;
        }
        //执行完命令后就设置回接收指令状态
        SockInfo->eCurOp = RecvCmd;

      

  2.   

    狂晕:
    //命令定义
    #define CMD_AUTHEN 1; //登录认证
    #define CMD_GETFILE 2; //获取文件
    #define CMD_REGISTER 3; //注册用户
    把定义的常量改为数字就可以了!为什么呢?
    void CSelectServerDlg::DoExceCmd(vector<SSocketInfo> & VecSockInfo, int nIdx)
    {
    SSocketInfo *SockInfo = &VecSockInfo[nIdx];
    switch(SockInfo->cmd.CommandID)
    {
    case 1:
    {
    DoAuthen(SockInfo->sock, SockInfo->data,SockInfo->cmd.DataSize);
    //break; }

    case 2:
    {
    DoGetFile(SockInfo->sock, SockInfo->data,SockInfo->cmd.DataSize);
    break;
    } case 3:
    {
    DoRegister(SockInfo->sock, SockInfo->data,SockInfo->cmd.DataSize);
    break;
    } default:
    break;
    }
    //执行完命令后就设置回接收指令状态
    SockInfo->eCurOp = RecvCmd;
    }
      

  3.   

    你的#define用法不对,后面没有;好才行define CMD_AUTHEN 1; //登录认证
    #define CMD_GETFILE 2;//获取文件
    #define CMD_REGISTER 3;//注册用户 
      

  4.   

    #define CMD_AUTHEN 1;->#define CMD_AUTHEN 1