“LiFei_SendCom::CSendCom::WriteMeter”: 不能将参数 3 从“BYTE *”转换为“const BYTE”
附代码:
         BYTE  *DataMarking = NULL;
        DataMarking = momery.safe_malloc(2);
        DataMarking[0] = 0xc0;
        DataMarking[1] = 0x10;
        WirterSuccess = SendCom.WriteMeter(strMeterNo, strPassWord, DataMarking, Data);
Writemeter代码:
bool LiFei_SendCom::CSendPort::WriteMeter
              (
          CString &strMeterNo, 
  
          CString &strPassWord, 

          vector<BYTE> &Data_Marking, 
        
          vector<BYTE>& Data
 )
{
 try
 {
  const int MeterNONumber = 12;  //电表
  while (strMeterNo.GetLength() != MeterNONumber)
  {
  strMeterNo = '0' + strMeterNo;
  }
  
  StrCovertToHexByte(strMeterNo,  m_MeterNo);
  StrCovertToHexByte(strPassWord, m_PassWord);   PRINT_ELEMENTS( m_MeterNo, "m_MeterNo: ");
  PRINT_ELEMENTS( m_PassWord, "m_PassWord: ");   std::copy( Data_Marking.begin(), Data_Marking.end(),
          std::back_inserter( m_DataMarking ) );
      
  std::copy( Data.begin(), Data.end(),
              std::back_inserter( m_Data) );
      
  PRINT_ELEMENTS( m_DataMarking, "m_DataMarking: ");
  PRINT_ELEMENTS( m_Data,        "m_Data: ");

  //整理成数据
  WriteDataHandle();
  
  //发送数据
  SentToMeter();   //检测接收数据,并返回电表内数据
         DivideReceiveData();
  
 }
 catch (CString error)
 {
        AfxMessageBox( error); return false;
 }
  
return 1;
   
}另外还有N多的这种警告d:\ce_work\senddata\senddataview.h(35) : warning C4995: “CDaoDatabase”: 名称被标记为 #pragma deprecated

解决方案 »

  1.   

    BYTE指针咋能赋值给vector引用呢
      

  2.   

    WirterSuccess = SendCom.WriteMeter(strMeterNo, strPassWord, (const BYTE)DataMarking, Data);
    强制转换下就好了
      

  3.   

    那我改怎么做 把Vector去掉吗?
      

  4.   

    照2楼的该还是错误
    d:\ce_work\senddata\settingtime.cpp(238) : error C2664: “LiFei_SendCom::CSendCom::WriteMeter”: 不能将参数 4 从“BYTE *”转换为“const BYTE *&”
            转换丢失限定符
      

  5.   

    看错了是参数四错误
    参数3没有错了BYTE  *Data        = NULL;  //储存发送数据 
          Data        = momery.safe_malloc(4);
         Data[0] = SendCom.IntToBcd(Year);
         Data[1] = SendCom.IntToBcd(Month);
         Data[2] = SendCom.IntToBcd(Day);
         Data[3] = SendCom.IntToBcd(Week);
    这是调WirterSuccess = SendCom.WriteMeter(strMeterNo, strPassWord, (const BYTE)DataMarking, Data); 的Data
      

  6.   

    参数3咋可能没问题啊,一个BYTE*可以强制转换为vector<BYTE>??????????
      

  7.   

    可是我按照2楼的方法改参数3不报错啊,不过同样的方法该参数4报错:
    error C2664: “LiFei_SendCom::CSendCom::WriteMeter”: 不能将参数 4 从“BYTE”转换为“const BYTE *&”
    这是也在参数4前也加const BYTE的错误
      

  8.   

    有问题的是SendCom.WriteMeterbool LiFei_SendCom::CSendPort::WriteMeter这两个明显不是一个函数嘛
      

  9.   

    LiFei_SendCom::CSendCom::WriteMeter把这个函数贴上来看看
      

  10.   

    可以了!这个函数有重载  我找到了一个.WriteMeter定义的参数3 和 4 不一样 只管改了一下  可以了 没错了谢谢两位了!!
      

  11.   

    LiFei_SendCom::CSendCom::WriteMeter
      

  12.   


    bool  LiFei_SendCom::CSendCom::WriteMeter
          (
      CString &MeterNo, 
      
      const CString &PassWord, 
      
      const BYTE DataMarking, 
      
      const BYTE Data
      )
    {
       //CString的电表号和密码转化成字节
       CString strError;
       
       const int MeterNONumber = 12;  //电表号
       while (MeterNo.GetLength() != MeterNONumber)
       {
       MeterNo = '0' + MeterNo;
       }
       const int PassWordNumber = (PassWord.GetLength())/2; //密码
       m_PassWordNumber = PassWordNumber;   //获取密码字节长度    m_PassWord = momery.safe_malloc(PassWordNumber);
       m_MeterNo  = momery.safe_malloc(MeterNONumber/2);
        
       m_MeterNoNumber = MeterNONumber/2;   //获取电表号的字节长度
       
    //转化成字
       StrCovertToHexByte(MeterNo, m_MeterNo);
       StrCovertToHexByte(PassWord, m_PassWord);   //初始化数据标识
       try
       {

       //初始化数据标识和发送数据
       InitalData(&DataMarking, m_DataMarkingNumber, m_DataMarking); 
           InitalData(&Data, m_DataNumber, m_Data); 

           //获取数据标识,用于校验
           m_HightDataMarking =  *m_DataMarking;
           m_LowDataMarking = *(m_DataMarking + 1);
     
       
       //整理成数据
       WriteDataHandle();
      
       //发送数据
       SentToMeter();    //检测接收数据,并返回电表内数据
           DivideReceiveData();   }
       catch (CString error)
       {
            AfxMessageBox( error); return false;
       }   return true;
       
    }