Использование функций карты Ubuntu - PullRequest
1 голос
/ 29 июля 2011

Я пытаюсь скомпилировать следующий код в 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 @ (нет): / usr / local / src / testing $ locate map.h

/ USR / включать / C ++ / 4.5 / бит / stl_map.h

/ USR / включать / C ++ / 4.5 / бит / stl_multimap.h * * 1016

/ 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 / профиль / осущ / profiler_map_to_unordered_map.h

/ USR / включать / C ++ / 4.5 / TR1 / unordered_map.h

Кроме того, у меня есть другая штука для mysql, которую я буду использовать, но main просто возвращает 0;

Ответы [ 3 ]

2 голосов
/ 29 июля 2011

Если вы не полностью испортили настройки компилятора, вам не нужно пропускать столько опций.Вы можете удалить -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 голос
/ 29 июля 2011

Либо используйте std::unordered_map и стандартный заголовок <unordered_map>, либо используйте std::map и стандартный заголовок <map>. Не смешивайте два.

0 голосов
/ 29 июля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...