我想分配内存。指针的数据类型应该不同。它取决于函数,它调用我的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;
答案 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
:范围规则类似。