使用地图函数ubuntu

时间:2011-07-29 15:46:58

标签: c++ 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

我得到了这个错误

1234@(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 / testing $ locate map.h

的/ usr /包括/ C ++ / 4.5 /比特/ stl_map.h

的/ usr /包括/ C ++ / 4.5 /比特/ stl_multimap.h

的/ usr /包括/ C ++ / 4.5 /比特/ unordered_map.h

的/ usr /包括/ C ++ / 4.5 /调试/ map.h

的/ usr /包括/ C ++ / 4.5 /调试/ multimap.h

的/ usr /包括/ C ++ / 4.5 /简档/ map.h

的/ usr /包括/ C ++ / 4.5 /简档/ multimap.h

的/ usr /包括/ C ++ / 4.5 /简档/ IMPL / profiler_map_to_unordered_map.h

的/ usr /包括/ C ++ / 4.5 / TR1 / unordered_map.h

此外我还有其他的mysql,我将使用,但主要只是返回0;

3 个答案:

答案 0 :(得分: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 :(得分:1)

使用std::unordered_map和标准标题<unordered_map>或使用std::map和标准标题<map>。不要混淆两者。

答案 2 :(得分:0)

您永远不必将-I放入g ++ bits目录,而只需直接包含目录。这让我相信你正在使用一个与你的编译器不兼容的库。

另一个选择是map包含之前的代码被破坏,例如{ }不匹配。