2011-07-29 55 views
1

我試圖編譯在Ubuntu使用地圖功能的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; 

下面的代碼使用此命令

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 

,我得到這個錯誤

[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 @(none):/ usr/local/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

此外,我還有其他studd在那裏的MySQL,我將使用,但主要只是返回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>。不要混合兩者。

0

您不應該將-I轉換成g ++ bits目錄,而只是直接包含目錄。這使我相信你正在使用一個與編譯器不兼容的庫。

另一種選擇是,在包括map之前的代碼被破壞並且具有不匹配{}例如。