boost / unordered_set: ошибка компиляции с помощью mingw () - PullRequest
0 голосов
/ 15 июня 2011

У меня есть кусок кода, который использует буст в unordered_set

#include <boost/unordered_set.hpp>
boost::unordered_set<string> mySet(100);

Он компилируется и прекрасно работает с gcc под unix. Когда я пытаюсь сделать кросс-компиляцию с помощью mingw32 (gmake 3.8.1), я получаю следующее сообщение:

In file included 
from /usr/i686-pc-mingw32/sys-root/mingw/include/boost/functional/hash/detail/hash_float.hpp:17,
from /usr/i686-pc-mingw32/sys-root/mingw/include/boost/functional/hash/hash.hpp:15,
from /usr/i686-pc-mingw32/sys-root/mingw/include/boost/functional/hash.hpp:6,
from /usr/i686-pc-mingw32/sys-root/mingw/include/boost/unordered/unordered_set.hpp:17,
from /usr/i686-pc-mingw32/sys-root/mingw/include/boost/unordered_set.hpp:16,
from /mnt/VirtualBoxShare/percolator/src/ProteinProbEstimatorHelper.h:33,
from /mnt/VirtualBoxShare/percolator/src/ProteinProbEstimator.cpp:28:

/usr/i686-pc-mingw32/sys-root/mingw/include/boost/cstdint.hpp:105: error: expected unqualified-id before 'unsigned'
/usr/i686-pc-mingw32/sys-root/mingw/include/boost/cstdint.hpp:105: error: expected ';' before 'unsigned'
/usr/i686-pc-mingw32/sys-root/mingw/include/boost/cstdint.hpp:105: error: declaration does not declare anything
/usr/i686-pc-mingw32/sys-root/mingw/include/boost/cstdint.hpp:114: error: expected unqualified-id before 'unsigned'
/usr/i686-pc-mingw32/sys-root/mingw/include/boost/cstdint.hpp:114: error: expected ';' before 'unsigned'
/usr/i686-pc-mingw32/sys-root/mingw/include/boost/cstdint.hpp:114: error: declaration does not declare anything

Мне кажется, это проблема, связанная с шаблоном; какие-либо предложения?

Спасибо, Маттиа


[EDIT]

доступны другие функции буста, например, лексическое приведение

#include <boost/lexical_cast.hpp>

1 Ответ

1 голос
/ 16 июля 2011

Кажется, что какой-то typedef ломает заголовок boost cstdint, который выглядит как

103   using ::int8_t;
104   using ::int_least8_t;
105   using ::int_fast8_t;
106   using ::uint8_t;
107   using ::uint_least8_t;
108   using ::uint_fast8_t;

в моей системе.Таким образом, некоторые герои, вероятно, определили «#define uint8_t» вместо «typedef ... uint8_t», и этот код, следовательно, сломался.

Вы можете попытаться изменить ваш boost / config / platform / win32.hpp и, если это поможет, сообщите об ошибке разработчикам mingw.

...