遇到这样一个问题:有个变量inData,其类型需要根据程序中所读取数据的不同类型来定义假如利用
switch(***)
{
   case ***:
   char* inData=……;
   break;   case ***:
   unsigned char* inData=……;
   break;   ……
   ……
}   inData……或者用
if(***)
{
  char* inData=……;
}
else if(***)
     {
       unsigned char* inData=……;
     }
……
……inData……
都会报错为inData……时,inData没有定义请问应该怎样解决这个问题呢在线等谢谢

解决方案 »

  1.   

    变量不要那样定义,除非前面加static
      

  2.   

    case 里面不允许对变量进行定义,除非把变量声明为static
      

  3.   

    可以用union,或者,有个现成的_variant_t或者VARIANT或者CVariant
      

  4.   

    加static好象还是undeclared identifier的错误啊用union,或者,有个现成的_variant_t或者VARIANT或者CVariant该怎么写呢?
    谢谢
      

  5.   

    union是C的结构类型,自己看书。_variant_t这些查查MSDN。
      

  6.   

    看看代码吧 // 根据体数据类型进行取值
    switch (m_VolumeInput->GetDataType()) 
    {
    case MITK_CHAR:
    {
    char* inData =(char*)m_VolumeInput->GetData(); 
    char* outData =(char*)m_VolumeOutput->GetData(); 
    }
    break;

    case MITK_UNSIGNED_CHAR:
    {
    unsigned char* inData =(unsigned char*)m_VolumeInput->GetData(); 
    unsigned char* outData =(unsigned char*)m_VolumeOutput->GetData(); 
    }
    break;

    case MITK_SHORT:
    {
    short* inData =(short*)m_VolumeInput->GetData(); 
    short* outData =(short*)m_VolumeOutput->GetData(); 
    }
    break;

    case MITK_UNSIGNED_SHORT:
    {
    unsigned short* inData =(unsigned short*)m_VolumeInput->GetData(); 
    unsigned short* outData =(unsigned short*)m_VolumeOutput->GetData(); 
    }
    break;

    case MITK_INT:
    {
    int* inData =(int*)m_VolumeInput->GetData(); 
    int* outData =(int*)m_VolumeOutput->GetData(); 
    }
    break;

    case MITK_UNSIGNED_INT:
    {
    unsigned int* inData =(unsigned int*)m_VolumeInput->GetData(); 
    unsigned int* outData =(unsigned int*)m_VolumeOutput->GetData(); 
    }
    break;

    case MITK_LONG:
    {
    long* inData =(long*)m_VolumeInput->GetData(); 
    long* outData =(long*)m_VolumeOutput->GetData(); 
    }
    break;

    case MITK_UNSIGNED_LONG:
    {
    unsigned long* inData =(unsigned long*)m_VolumeInput->GetData(); 
    unsigned long* outData =(unsigned long*)m_VolumeOutput->GetData(); 
    }
    break;

    case MITK_FLOAT:
    {
    float* inData =(float*)m_VolumeInput->GetData(); 
    float* outData =(float*)m_VolumeOutput->GetData(); 
    }
    break;

    case MITK_DOUBLE:
    {
    double* inData =(double*)m_VolumeInput->GetData(); 
    double* outData =(double*)m_VolumeOutput->GetData(); 
    }
    break;
    } for (int k = 0; k< m_VolumeInput->GetImageNum(); k++) 

    for (int i = 0; i< m_VolumeInput->GetHeight(); i++) 

    for (int j = 0; j< m_VolumeInput->GetWidth(); j++) 

    unsigned long Dst = k*m_VolumeInput->GetWidth()*m_VolumeInput->GetHeight()
    + i*m_VolumeInput->GetWidth() + j;  outData[Dst] = inData[Dst]; 



      

  7.   

    以下代码仅供参考:
    LPVOID pInData = NULL;
    LONG nData[] = {100,200,300,400};
    short nSData[] = {1000,2000,3000,4000};
    int nType = 1;
    int i=0;
    while(nType<5){
    switch (nType) 
    {
    case 1:
    pInData = new LONG[4];
    memset(pInData,0,sizeof(LONG)*4);
    memcpy(pInData,nData,sizeof(nData));
    for(i=0;i<4;i++){
    LONG* temp = (LONG*)pInData;
    TRACE("pInData=%d\n",*(temp+i));
    }
    break;
    case 2:
    pInData = new char[20];
    strcpy((char*)pInData,"CHAR");
    TRACE("pInData=%s\n",pInData);
    break;
    case 3:
    pInData = new unsigned char[20];
    strcpy((char*)pInData,"UNSIGNED_CHAR");
    TRACE("pInData=%s\n",pInData);
    break;
    case 4:
    pInData = new short[4];
    memset(pInData,0,sizeof(short)*4);
    memcpy(pInData,nSData,sizeof(nSData));
    for(i=0;i<4;i++){
    short* temp = (short*)pInData;
    TRACE("pInData=%d\n",*(temp+i));
    }
    break;
    }

    if(pInData != NULL)
    {
    delete []pInData;
    }
    nType ++;
    }