我想建立一個模板,讓我使用一個可調整大小的數組。有沒有辦法找到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不會爲你調用構造函數。 –