我正在尝试构建一个模板,让我可以使用可调整大小的数组。有没有办法找到sizeof(T)?我使用 malloc 而不是 new,因为我想在调整数组大小的函数中使用 realloc。这是我的类的构造函数出现错误:
template <class T>
set<T>::set(void) {
arr = malloc(10 * sizeof(T));
numElts = 0;
size = 10;
};
尝试构建时收到以下错误消息:
error C2440: '=' : cannot convert from 'void *' to 'int *'
1> Conversion from 'void*' to pointer to non-'void' requires an explicit cast
1> c:\set.cpp(42) : while compiling class template member function 'set<T>::set(void)'
1> with
1> [
1> T=int
1> ]
在主函数中我用以下方式调用它:
set<int> *set1 = new set<int>();
根据我所做的研究,编译器似乎无法知道 sizeof(T) 使用什么,因此无法编译。我还能怎么做呢?
malloc
返回一个void*
,同时C允许分配不兼容的指针,C++才不是。你需要投射到T*
malloc 的结果假设arr
定义为T*
.
arr = static_cast< T* >( malloc(10 * sizeof(T)) );
调用没有问题sizeof(T)
在模板内,只要T
在实例化点完成(并且int
是基本类型,它总是完整的)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)