我試圖在C++中學習模板,我嘗試的其中一件事是編寫一個像函數式語言中常見的映射函數。當時的想法是這樣的:在C++中使用模板映射函數
template <class X> X * myMap(X * func(X), X * array, int size)
{
X * temp;
for(int i = 0, i < size, i++) {temp[i] = (*func)(array[i]);}
return temp;
}
但是當我嘗試用這個:
int test(int k) { return 2 * k;}
int main(void)
{
int k[5] = {1,2,3,4,5};
int *q = new int[5];
q = myMap(&test, k, 5);
for(int i=0; i<5; i++) {cout << q[i];}
delete [] q;
return 0;
}
我編譯時類型不匹配錯誤:我試圖改變
main.cpp:25: error: no matching function for call to ‘myMap(int (*)(int), int [5], int)’
它到:
int main(void)
{
int *k = new int[5];
int *q = new int[5];
for(int i=0; i<5;i++) {k[i] = i;}
q = myMap(&test, k, 5);
for(int i=0; i<5; i++) {cout << q[i];}
delete [] q;
return 0;
}
錯誤一團糟年齡變化爲:
main.cpp:26: error: no matching function for call to ‘myMap(int (*)(int), int*&, int)’
這可能是非常錯誤的東西,但我找不到在哪裏。
編輯:錯誤其中: 1)我打錯了指針功能。它是X(* func)(X)而不是X * func(X)。 2)忘記分配溫度。必須做X * temp = new X[size]
。 3)有沒有更多的錯誤?
你知道這個函數已經存在於標準庫中了吧? (叫`std :: transform`) – jalf 2010-11-29 17:27:44
噢,我只是想學習如何做到這一點。 – 2010-11-29 17:31:13
您沒有爲新創建的陣列分配任何內存。 – sepp2k 2010-11-29 17:35:31