當我嘗試編譯此:什麼導致這個模板相關的編譯錯誤?
#include <map>
#include <string>
template <class T>
class ZUniquePool
{
typedef std::map< int, T* > ZObjectMap;
ZObjectMap m_objects;
public:
T * Get(int id)
{
ZObjectMap::const_iterator it = m_objects.find(id);
if(it == m_objects.end())
{
T * p = new T;
m_objects[ id ] = p;
return p;
}
return m_objects[ id ];
}
};
int main(int argc, char * args)
{
ZUniquePool<std::string> pool;
return 0;
}
我得到這個:
main.cpp: In member function ‘T* ZUniquePool<T>::Get(int)’:
main.cpp:12: error: expected `;' before ‘it’
main.cpp:13: error: ‘it’ was not declared in this scope
我在Mac OS X 使用GCC 4.2.1它工作在VS2008。
我想知道是否可能是這個問題的變化: Why doesn't this C++ template code compile? 但由於我的錯誤輸出只是部分相似,我的代碼在VS2008,我不知道。
任何人都可以闡明我做錯了什麼嗎?
太棒了!您不僅解決了我的問題,而且還讓我意識到對編譯器處理模板的方式有着根本性的重要性。 非常感謝。 – Setien 2010-06-11 06:53:26