VC ++ 2008 проблема компиляции с boost - PullRequest
3 голосов
/ 22 января 2011

Внезапно двухпроектное решение перестало компилироваться.Я не помню, чтобы какие-либо изменения могли поставить под угрозу сборку.Один проект - библиотека, а другой - exe.Библиотека все еще компилируется без проблем, но exe завершается неудачно.Я выделил проблему в тот момент, когда некоторые файлы загрузки загружены.Вот stdafx.cpp, которого достаточно, чтобы показать ошибку:

#include "stdafx.h"
#include <boost/thread.hpp>

И вот эти сообщения об ошибках:

1>Compiling...
1>stdafx.cpp
1>        c:\program files (x86)\microsoft visual studio 9.0\vc\include\stdlib.h(525) : see declaration of '_ultoa'
1>c:\libs\boost_1_44_0\boost\mpl\size_t_fwd.hpp(23) : error C2143: syntax error : missing ',' before 'constant'
1>c:\libs\boost_1_44_0\boost\mpl\aux_\integral_wrapper.hpp(42) : error C2143: syntax error : missing ',' before 'constant'
1>c:\libs\boost_1_44_0\boost\mpl\aux_\integral_wrapper.hpp(84) : error C2143: syntax error : missing ',' before 'constant'
1>c:\libs\boost_1_44_0\boost\mpl\aux_\integral_wrapper.hpp(84) : error C3211: 'boost::mpl::size_t<__formal>::value' : explicit specialization is using partial specialization syntax, use template <> instead
1>        with
1>        [
1>            __formal=1135
1>        ]
1>        c:\libs\boost_1_44_0\boost\mpl\aux_\integral_wrapper.hpp(45) : see declaration of 'boost::mpl::size_t<__formal>::value'
1>        with
1>        [
1>            __formal=1135
1>        ]

Я заметил, что если я изменю строку включения на:

#include "stdafx.h"
#include <boost/thread/thread.hpp>

это работает, но у меня есть другие включения в коде:

#include <boost/bind.hpp>
#include <boost/function.hpp>

, и они также дают те же 4 строки ошибок.

Любойесть идеи, что может быть не так?Я повторяю, что этот код работал месяцами, а ошибка появилась вчера.

1 Ответ

1 голос
/ 22 января 2011

Трудно догадаться, но я думаю, что в stdafx.h может быть определен какой-то макрос, который конфликтует с Boost (т.е. Boost использует переменную / function / template / что угодно с тем же именем, что и у вашего макроса). Помните, что макросы охватывают области видимости. Быстрая проверка - исчезнет ли проблема, если вы измените порядок включений?

...