C ++数据类型取决于switch case

时间:2016-02-29 13:27:37

标签: c++ memory-management switch-statement type-conversion

我想分配内存。指针的数据类型应该不同。它取决于函数,它调用我的getMemory()函数。

try{    
switch(auswahl){

        case 1:             R3vec < double >* ptr;          
                            ptr = new R3Tools::R3vec < double >[ N ]();             
                            break;

        case 2:             LocalFlow < double >* ptr;          
                            ptr = new FlowTools::LocalFlow < double >[ N ]();           
                            break;

        case 3:             LocalFlow < std::complex < double > >* ptr;             
                            ptr = new FlowTools::LocalFlow < std::complex < double > >[ N ]();          
                            break;

        default: //

}
}

catch( const std::bad_alloc& ){     
                    throw std::out_of_range("Array3D<T>::getMemory\n\tunable to satisfy request for memory!"); 
} 

return ptr;

我收到错误消息:&#39; ptr&#39;

的重新声明无效

我该如何解决这个问题?

请注意,此代码显示在原型inline void* getMemory(int) const;

的函数中

1 个答案:

答案 0 :(得分:2)

C ++是一种强类型语言,这意味着您需要确定ptr(以及函数return类型)的类型,然后坚持。< / p>

在您的情况下要考虑的几个选项是使用(i)公共基类并返回指向该类的指针,(ii)具有类型描述符的union或原始(iii)返回a void*

虽然(i)可以说是最具面向对象的方式&#34;这样做,实际上实现这可能意味着很多样板代码和大量的打字。但从长远来看值得。鉴于函数的返回类型为void*,您可以使用选项(iii)并编写

return (void*)new R3Tools::R3vec < double >[ N ]();等。

每个case中的

。这样就不需要变量ptr break语句。但是将指针强制转换为有意义的东西(对于必要的后续delete而言必不可少)将是困难的。

在这方面,ptr块只是带有一系列标签的switch:范围规则类似。