2011-07-29 2 views
1
私は、このコマンド

使用して、マップ機能のubuntuに

g++ -Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqlclient -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -DUNIV_LINUX -DUNIV_LINUX -I/usr/include/ -I/usr/include/c++/4.5/bits/ main.c -o program 

を使用してUbuntuの

#include <unordered_map.h> 
typedef unsigned int key_type; // fine, has < , ==, and std::hash 
typedef std::map<key_type, some_value_type> my_map; 

に次のコードをコンパイルしようとしている

と私はここで

[email protected](none:/usr/local/src/testing$ make 
g++ -Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqlclient -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -DUNIV_LINUX -DUNIV_LINUX -I/usr/include/ -I/usr/include/c++/4.5/bits/ main.c -o program 
In file included from main.c:5:0: 
/usr/include/c++/4.5/bits/unordered_map.h:33:32: error: expected constructor, destructor, or type conversion before ‘(’ token 
make: *** [all] Error 1 

があり、このエラーを取得しますmap.hの検索

1234 @(なし):/ usr $ /ローカル/ SRC /テスト見つけmap.h

/usr/include/c++/4.5/bits/stl_map.h

/usr/include/c++/4.5/bits/stl_multimap.h

/usr/include/c++/4.5/bits/unordered_map.h

/usr/include/c++/4.5/debug/map.h

/usr/include/c++/4.5/debug/multimap。 h

/usr/include/c++/4.5/profile/map.h

/usr/include/c++/4.5/profile/multimap.h

/usr/include/c++/4.5/profile/impl/profiler_map_to_unordered_map.h

/usr/include/c++/4.5 /tr1/unordered_map.h

また、私はmysqlのために他のスタッドを持っていますが、私はこれを使用しますが、mainはちょうど0を返しています。

+1

'map'または' unordered_map'を使用しますか? – robert

+0

なぜunordered_mapをインクルードしますか?マップのタイプを宣言していますか? –

答えて

2

コンパイラのセットアップを完全に混乱させていない場合は、その多くのオプションを渡す必要はありません。 -I/usr/include/ -I/usr/include/c++/4.5/bits/を削除しても問題ありません。

また
g++ -Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqlclient \ 
-I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing \ 
-DUNIV_LINUX -DUNIV_LINUX main.c -o program 

、あなたは、あなたが直接含まれてはならない実装ファイルunordered_map.hを見ることが出来ましたインクルードパスを微調整するので。代わりに、一般的には

#include <unordered_map> 
// for C++0x 

または

#include <tr1/unordered_map> 
// for C++98 

が含まれ、C++のための "標準ライブラリ" のヘッダーの名前には.hを持っていません。 Cライブラリのヘッダーには(例:math.h)、標準的な名前空間に宣言が正しくラップされた追加バージョンが用意されています。これらのヘッダーはcで始まります。 cmath

1

std::unordered_mapと標準ヘッダ<unordered_map>を使用するか、std::mapと標準ヘッダ<map>を使用してください。 2つを混ぜてはいけません。

0

g ++ bitsディレクトリには絶対に-Iを含める必要はありませんが、直接インクルードディレクトリにしてください。これはあなたのコンパイラと互換性のないライブラリを使用していると信じています。

もう1つのオプションは、mapのインクルード前のコードが壊れており、たとえば{}のミスマッチがあることです。

関連する問題