2011-07-21 12 views
0

boost unordered_multimapクラスを使用しようとしていますが、宣言する際に問題があります。エラーはコードの後に​​続きます。boost unordered_multimapの宣言方法

#include <iostream> 
#include <map> // header file needed for to use MAP STL 
#include <boost/unordered_map.hpp> 

using namespace std; 

int main(void) 
{ 

map<int, map<int, map<int,int> > > _3dstl; 

_3dstl[0][0][0] = 10; 

cout<<_3d[0][0][0]<<endl; 


typedef boost::unordered_multimap<int, typedef boost::unordered_multimap<int, int>> unordered_map; 
unordered_map _2d; 

    return 0; 
} 

これはエラーです:

||In function 'int main()':| 
|17|error: template argument 2 is invalid| 
|17|error: template argument 5 is invalid| 
|17|warning: 'typedef' was ignored in this declaration| 
|18|error: 'unordered_map' was not declared in this scope| 
|18|error: expected ';' before 'location3d'| 
||=== Build finished: 4 errors, 1 warnings ===| 

答えて

2

変更この行:これに

typedef boost::unordered_multimap<int, typedef boost::unordered_multimap<int, int>> unordered_map; 

typedef boost::unordered_multimap<int, boost::unordered_multimap<int, int> > unordered_map; 

が第二のtypedefが必要と構文エラーではありません。また、C++ 2003では、テンプレート宣言で>>を気にする必要があります。あなたは(IMO悪い習慣です)using namespace std;を使用している場合、これはstd::unordered_mapと衝突するので、


また、typedefのために、その後unordered_mapを別の名前を使用してください。提案はintmap2dまたは何かになります。

+0

これは、OPの 'namespace std;'を使っても、ひどい命名規則です。その結果得られた男に「unordered_map」と呼ばず、将来の頭痛を保存しないでください:-) –

+0

@Kerrek SB:追加されました。 – orlp