我在解决这个问题时遇到了问题,
class A {
public:
A(int n) {
a = n;
}
int getA() {
return a;
}
private:
int a;
};
int main(){
A* a[3];
A* b[3];
for (int i = 0; i < 3; ++i) {
a[i] = new A(i + 1);
}
void * pointer = a;
b = (A* [])pointer; // DOESNT WORK Apparently ISO C++ forbids casting to an array type ‘A* []’.
b = static_cast<A*[]>(pointer); // DOESN'T WORK invalid static_cast from type ‘void*’ to type ‘A* []’
return 0;
}
我不能将泛型类型用于我需要的东西。
提前致谢。
答案 0 :(得分:10)
数组是C中的二等公民(因此在C ++中)。例如,您无法分配它们。并且很难将它们传递给函数,而不会将它们降级为指向其第一个元素的指针 对于大多数用途,指向数组的第一个元素的指针可以像数组一样使用 - 除非您不能使用它来获取数组的大小。
写作时
void * pointer = a;
a
被隐式转换为指向其第一个元素的指针,然后将其转换为void*
。
由此,你不能让数组返回,但你可以得到指向第一个元素的指针:
A* b = static_cast<A*>(pointer);
(注意:指向不相关类型的指针之间的转换需要reinterpret_cast
,除了对void*
的强制转换,这些转换是隐式的,并且从void*
到任何其他指针,这可以使用static_cast
。)
答案 1 :(得分:8)
也许你的意思是
memcpy(b, (A**)pointer, sizeof b);
也可以使用static_cast
版本。