2011-01-22 11 views
3

突然2つのプロジェクトソリューションがコンパイルに失敗しました。ビルドを妥協させるような変更をしたことは覚えていません。 1つのプロジェクトはlibで、もう1つはexeです。 libはまだ問題なくコンパイルされていますが、exeは失敗します。いくつかのブーストファイルがロードされた時点で問題を切り分けました。ここでは、エラーを表示するのに十分である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、次にブースト、そして他のものを含んでいます。このような問題の検出を簡素化することができます –

答えて

1

私はstdafx.hで定義されているマクロがBoostと衝突する(Boostは変数/関数/テンプレート/あなたのマクロと同じ名前のものを使用します)と考えられます。マクロはスコープにまたがっていることに注意してください。クイックチェック - インクルードの順序を変更すると、問題は消えますか?

+0

stdafx.hこれは: – Goran

+0

ありがとうチャーリー、あなたは正しかった、私は問題を特定した。これは昨日誤ってResource.hに定義されていましたが、新しいリソースIDを定義していました。 #define N 1135 – Goran

+0

はい、これはC++インクルードシステムです:(これはwindows.hヘッダとそのmin/maxマクロで定期的に起こります。 –

関連する問題