【发布时间】:2020-08-03 01:10:37
【问题描述】:
我在以下用于记忆化的模板类的定义中遇到许多 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;
};
我在 Windows 上的 Eclipse 下编译时收到以下错误消息:
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 )
这个定义有什么问题?
【问题讨论】:
-
请分享实际的错误信息。
-
map.find( K )不起作用。 K 是一种类型。 -
unordered_map...的参数K有很多限制,你不应该是using namespace std; -
map( unordered_map< K, V >( 4 * n / 3 ) )可以简单地为map(4 * n / 3 )。