2011-07-29 3 views
1

Я пытаюсь скомпилировать следующий код в убунтуИспользование картографических функций 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/Местные/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>. Не смешивайте их.

0

Вы не должны указывать -I в каталог g ++ bits, но только каталог include напрямую. Это заставляет меня думать, что вы используете библиотеку, которая несовместима с вашим компилятором.

Другой вариант заключается в том, что код, предшествующий включению map, сломан и несовместим, например, {}.

Смежные вопросы