2011-01-22 2 views
3

Внезапно два проектных решения начали скомпилироваться. Я не помню, чтобы какие-либо изменения могли нарушить сборку. Один проект - это lib, а другой - exe. Lib все еще компилируется без проблем, но exe терпит неудачу. Я изолировал проблему в момент загрузки некоторых файлов boost. Вот stdafx.cpp этого достаточно, чтобы показать ошибку:VC++ 2008 компиляция проблемы с повышением

#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 линии ошибок.

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

+0

'stdafx.h' - правильное место для включения заголовков форвардов, общим правилом является включение в предварительно скомпилированный заголовок все редко используемые никогда не измененные заголовки. сначала я включаю материал winapi, затем STL, затем boost, затем другие. это может упростить обнаружение таких проблем. –

ответ

1

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

+0

stdafx.h: – Goran

+0

Спасибо, Чарли, ты был прав, я нашел проблему. Это была строка определения в Resource.h, которая вчера попала по ошибке, определяя новый идентификатор ресурса. Это линия, которая стоила мне почти двух дней головной боли: #define N 1135 – Goran

+0

Да, это C++ включает систему :(Это происходит регулярно с заголовками windows.h и их макросами min/max. –

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