我正試圖學習STL庫,並遇到一個奇怪的問題。此代碼編譯完美:關於模板函數中向量迭代器的問題
void Show(vector<int> myvec)
{
vector<int>::iterator it;
cout << "Vector contains:";
for(it = myvec.begin(); it < myvec.end(); it++)
{
cout << " " << *it;
}
cout << endl;
}
而這一次讓我在編譯時的錯誤消息:
template <class T>
void Show2(vector<T> myvec)
{
vector<T>::iterator it;
cout << "Vector contains:";
for(it = myvec.begin(); it < myvec.end(); it++)
{
cout << " " << *it;
}
cout << endl;
}
的錯誤是:
$ g++ hello.cpp
hello.cpp: In function ‘void Show2(std::vector<T, std::allocator<_Tp1> >)’:
hello.cpp:19: error: expected ‘;’ before ‘it’
hello.cpp:21: error: ‘it’ was not declared in this scope
這似乎是一個很簡單的錯誤,但我找不到它。
可能的重複[在哪裏放置「模板」和「typename」依賴名稱](http://stackoverflow.com/questions/610245/where-to-put-the-template-and-typename-依賴名稱) – fredoverflow
可能回答了很多以前,但很難搜索typename /依賴名稱,如果你不知道這樣的條款存在 – Erik
@FredOverflow這是一個非常不錯的鏈接,我可能會讀它馬上。但是,就像@Erik所說的,如果你不知道底層問題是什麼,那麼你會搜索許多特定的術語,而不會去解決更普遍的問題。我做了許多迭代器,模板,矢量,STL等搜索,沒有發現任何東西,我甚至都不知道關鍵字'typename'存在(:(是的,我是noob:P)。我認爲它只是一個愚蠢的語法錯誤 –