Я получаю многочисленные ошибки C ++ в следующем определении класса шаблона для запоминания:
template < typename K, typename V > class Memo{
public:
Memo( int n ) : map( unordered_map< K, V >( 4 * n / 3 ) ) {}
bool contains( K key ) { return map.find( K ) != map.end(); }
V* get( K key ) {
unordered_map< K, V >::iterator iter;
iter = map.find( K );
if ( map.end() != iter )
return &( iter->second );
else
return NULL;
}
private:
unordered_map< K, V > map;
};
Я получаю следующие сообщения об ошибках, компилируемые в Eclipse на Windows:
g++ -std=c++0x -O3 -Wall -c -fmessage-length=0 -o "src\\XorQuadruples.o" "..\\src\\XorQuadruples.cpp"
..\src\XorQuadruples.cpp: In member function 'bool Memo<K, V>::contains(K)':
..\src\XorQuadruples.cpp:60:59: error: expected primary-expression before ')' token
bool contains( K key ) { return map.end() != map.find( K ); }
^
..\src\XorQuadruples.cpp: In member function 'V* Memo<K, V>::get(K)':
..\src\XorQuadruples.cpp:62:3: error: need 'typename' before 'std::unordered_map<K, V>::iterator' because 'std::unordered_map<K, V>' is a dependent scope
unordered_map< K, V >::iterator iter = map.find( K );
^
..\src\XorQuadruples.cpp:62:35: error: expected ';' before 'iter'
unordered_map< K, V >::iterator iter = map.find( K );
^
..\src\XorQuadruples.cpp:63:21: error: 'iter' was not declared in this scope
if ( map.end() != iter )
Что не так с этим определением?