大致要实现以下功能就是通过选择的data_type的值来初始化相应的变量来在后面的程序中用,我用的是VS2008,由于作用域的问题,之后用到变量时总出现很多变量未定义的错误,谁知道怎么解决么??
switch(data_type)
{
case 1:
{
BYTE* buffer_read = (BYTE*)malloc(number*sizeof(BYTE));
BYTE* buffer_write = (BYTE*)malloc(number1*sizeof(BYTE));
BYTE* buffer_reads[10];
break;
}
case 2:
{
unsigned short* buffer_read = (unsigned short*)malloc(number*sizeof(unsigned short));
unsigned short* buffer_write = (unsigned short*)malloc(number1*sizeof(unsigned short));
unsigned short* buffer_reads[10];
break;
}
case 3:
{
float* buffer_read = (float*)malloc(number*sizeof(float));
float* buffer_write = (float*)malloc(number1*sizeof(float));
float* buffer_reads[10];
break;
}
case 4:
{
double* buffer_read = (double*)malloc(number*sizeof(double));
double* buffer_write = (double*)malloc(number1*sizeof(double));
double* buffer_reads[10];
break;
}
default:
{
MessageBox(_T("读取类型错误!"));
break;
return;
}
}

解决方案 »

  1.   

    你该不会是在switch之后还用buffer_read这些变量的吧 那超过了作用域了,你得在case中使用
      

  2.   

    貌似vs2008中case:后面没法声明变量,声明变量最好放到switch前。
      

  3.   

    那怎么解决要通过判断data_type的值来初始化不同类型的变量呢???
      

  4.   

    使用模板
    后面使用的代码写成模板在break之前调用,这样前面分配啥类型就都不重要了.代码也短了很多.
      

  5.   

    case中不能定义变量
    都定义到case上面
    然后在case里面赋值就好了
      

  6.   

    干脆都定义成void*吧
    到时候转一下
      

  7.   

    定义成void也试过了,但是有错误,说是void大小未定什么的。。不知道你有什么具体办法。。
      

  8.   

    用boost::any应该可以解决这个问题吧?
    http://www.cppprog.com/2009/0609/124.html
      

  9.   

    创建为不同的结构体struct1,struct2之类的,
    然后用data_type来判断,然后struct1 str1
    不知可否
      

  10.   

    你case里给分配内存的变量出了switch就释放了,有什么用啊?变量声明放到外面,或者放到类成员啊
      

  11.   

    buffer_read 这些指针出了作用域就失效了  你可以用函数模板   
    template<typename T> 
    BOOL AllocMemoryFunc(int data_type,T datatype,int number,int number1,T *buffer_read,T *buffer_write, T* buffer_reads[])
    {
       if((data_type>=1)&&(data_type<=4))
       {
          T* buffer_read = (T*)malloc(number*sizeof(T)); 
          T* buffer_write = (T*)malloc(number1*sizeof(T)); 
          T* buffer_reads[10]; //这个10也可以用参数传进来,而且我觉得buffer_reads[10]这个就是定义一个指针数组,不用在这个函数里面
           return TRUE;
       }
       else
      {
           return FALSE;
      }
    }
    然后使用完毕后一定要free所有申请的内存 否则会内存泄漏  另外,我觉得data_type这个你最好用枚举,这样你得代码容易理解,容易维护,正规编程绝对没有用数字来代表某种含义的,那样你自己看还行 别人看会累死
      

  12.   

    模板是c++非常重要的一部分,c++实际包含4部分:c,面向对象,模板和容器(《Effective c++》第12页),所以你要想学好c++,模板一定要会。其实模板很简单,看看你就能会,分为函数模板和类模板。 我上边给你写了个函数模板,但是没调试,反正就是那个意思  你在用这个函数模板时 直接定义相应的数据类型  然后传给函数参数就行  就跟你正常调用函数一样
    学了其实不难 就怕你不学  不学看上去永远是那么高深莫测  其实很简单
      

  13.   

    void* buffer_read ; 
    void* buffer_write ; 
    void* buffer_reads; switch(data_type) 

    case 1: 

     buffer_read = malloc(number*sizeof(BYTE)); 
     buffer_write = malloc(number1*sizeof(BYTE)); 
     buffer_reads = malloc(10*sizeof(BYTE)); 
    break; 

    //其他省略...
    }这样也不可以?
      

  14.   

    错了点,应该是:void* buffer_read ; 
    void* buffer_write ; 
    void* buffer_reads[10]; switch(data_type) 

    case 1: 

     buffer_read = malloc(number*sizeof(BYTE)); 
     buffer_write = malloc(number1*sizeof(BYTE)); 
     break; 

    //其他省略...
    }
    指针都是四个字节。