可能重複:
Where and why do I have to put the 「template」 and 「typename」 keywords?這個靜態模板函數的實現有什麼問題?
我學習的模板功能。我試圖實現一個清除指針列表的靜態模板函數。要做到這一點,我想使用模板。其我的代碼:
#include <cstdio>
#include <list>
using namespace std;
class util
{
public:
template <class ARG>
static void CleanPointers(list<ARG> &mylist) {
list<ARG>::iterator it;
for (it = mylist.begin(); it != mylist.end(); it++)
{
ARG obj = (ARG) *it;
delete obj;
}
mylist.clear();
};
util();
~util();
};
int main()
{
list<int*> mylist;
mylist.push_back(new int(1));
mylist.push_back(new int(2));
util::CleanPointers<int*>(mylist);
return 0;
}
我recived跟隨編譯錯誤消息,我不明白這裏的重點。 :)爲什麼需要我放;在之前呢?
prog.cpp: In static member function ‘static void util::CleanPointers(std::list<ARG, std::allocator<_Tp1> >&)’:
prog.cpp:10: error: expected `;' before ‘it’
prog.cpp:11: error: ‘it’ was not declared in this scope
prog.cpp: In static member function ‘static void util::CleanPointers(std::list<ARG, std::allocator<_Tp1> >&) [with ARG = int*]’:
prog.cpp:28: instantiated from here
prog.cpp:10: error: dependent-name ‘std::list::iterator’ is parsed as a non-type, but instantiation yields a type
prog.cpp:10: note: say ‘typename std::list::iterator’ if a type is meant
我認爲使用短語「清除指針」是一個非常糟糕的主意,因爲這意味着什麼也沒有,並且可能是災難性的誤導。正確的概念是「刪除一個動態分配的對象(通過調用指向該對象的指針delete」)。 –
@KerrekSB,yeap!你是對的。我會改變這一點。 –