我正在練習功能專業化,我試圖用專門的打印功能創建一個小的存儲對象。這裏是我的代碼:模板功能專業化,C++
#ifndef STORAGE_HPP_
#define STORAGE_HPP_
#include <iostream>
using namespace std;
template <typename T, int size> class Storage
{ //LINE 16 ERROR
public:
Storage():arr(new T*[size]){};
~Storage()
{
for (int i = 0; i < size; i++)
{
delete arr[i];
}
delete[] arr;
}
void push(T obj, int i)
{
arr[i] = new T(obj);
}
void print()
{
for (int i = 0; i < size; i++)
{
cout << *arr[i];
}
cout << endl;
}
private:
T** arr;
};
template <typename T, int size> void Storage<int,size>::print() //LINE 38 ERROR
{
for (int i = 0; i < size; i++)
{
cout << (char) *arr[i];
}
cout << endl;
}
#endif /* STORAGE_HPP_ */
而且我得到這個錯誤:
../Storage.hpp:38:63: error: invalid use of incomplete type
class Storage<int, size>
../Storage.hpp:9:1: error: declaration of ‘class Storage<int, size>’
所以,第一個問題:可以專門的函數類內部實現的?我試過但得到一個錯誤。 其次,爲什麼我得到我附加的錯誤? 謝謝!
編輯:我嘗試了一些新的東西,因爲這裏有人建議。我在課堂上打印的內容只有void print()
,我已經在外面實現了,所以我可以重載這個函數。在這裏:
template <typename T, int size>
void Storage<T,size>::print()
{
for (int i = 0; i < size; i++)
{
cout << *arr[i];
}
cout << endl;
}
template <typename T, int size>
void Storage<int,size>::print() //ERROR HERE
{
for (int i = 0; i < size; i++)
{
cout << *arr[i];
}
cout << endl;
}
現在,我得到invalid use of incomplete type ‘class Storage<int, size>’
我在哪裏寫了錯誤的位置 我明白這是一個通用的解決方案,我在正確的(當然!)?爲什麼我會得到這個錯誤?
我不知道,你可以做一個偏特 – Seb
其他一切不談,不應該'模板無效存儲 ::打印()'是'模板 void存儲 :: print()'? –
Chad
@查德:不,他試圖做部分專業化。他想要的是'typename T'被刪除。 – PlasmaHH