我想建立一个模板,让我使用一个可调整大小的数组。有没有办法找到sizeof(T)?我使用的是malloc而不是new,因为我想在调整数组大小的函数中使用realloc。这是我的类的构造函数是得到错误:在C++中创建模板时可以找到sizeof(T)吗?
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)如何使用,因此无法编译。我还会怎么做呢?
请记住,你的'set'只能使用POD类型。 –
错误*清楚*状态“无法从'void *'转换为'int *'”,甚至继续建议您需要显式强制转换将其关闭。显然,问题是它不知道'sizeof(T)'是什么。 –
*它看起来像编译器无法知道sizeof(T)*使用什么* - 当然它确实;模板实现都是在编译时执行的。错误信息很明显;你需要施放malloc的结果。至于你为什么使用malloc ...不知道。 malloc不会为你调用构造函数。 –