我想寫一個函數來打印常見STL容器(向量,列表等)的表示形式。我給了函數一個模板參數T,例如,它可能表示向量。我有越來越型T.T :: iterator錯誤,其中模板參數T可能是矢量<int>或列表<int>
vector<int> v(10, 0);
repr< vector<int> >(v);
的迭代器的問題...
template <typename T>
void repr(const T & v)
{
cout << "[";
if (!v.empty())
{
cout << ' ';
T::iterator i;
for (i = v.begin();
i != v.end()-1;
++i)
{
cout << *i << ", ";
}
cout << *(++i) << ' ';
}
cout << "]\n";
}
...
[email protected]:~/Desktop/stl$ g++ -Wall main.cpp
main.cpp: In function ‘void repr(const T&)’:
main.cpp:13: error: expected ‘;’ before ‘i’
main.cpp:14: error: ‘i’ was not declared in this scope
main.cpp: In function ‘void repr(const T&) [with T = std::vector<int, std::allocator<int> >]’:
main.cpp:33: instantiated from here
main.cpp:13: error: dependent-name ‘T::iterator’ is parsed as a non-type, but instantiation yields a type
main.cpp:13: note: say ‘typename T::iterator’ if a type is meant
我嘗試 'typename的T ::迭代器' 爲編譯器建議,但只會得到一個更加神祕的錯誤。
編輯:謝謝你們的幫助!下面是一個人工作版本誰想要使用此功能:
template <typename T>
void repr(const T & v)
{
cout << "[";
if (!v.empty())
{
cout << ' ';
typename T::const_iterator i;
for (i = v.begin();
i != v.end();
++i)
{
if (i != v.begin())
{
cout << ", ";
}
cout << *i;
}
cout << ' ';
}
cout << "]\n";
}
如何發佈「更神祕」的錯誤信息呢? – 2010-09-17 11:53:07
順便說一句,你可能想用其他非RandomAccess迭代器支持的東西替換v.end()-1。 – sellibitze 2010-09-17 12:02:56