2011-08-02 18 views
0

何かの理由で、boost :: regexが自分のアプリケーションをオーバーロードし、エラーなしにフリーズしますが、うまくコンパイルされます。たとえば、このコードはフラットに失敗します。私は間違って何をしていますか?私はそれがDLLエラーであるかどうか確認するために1.47を上げるように更新しましたが、それでも動作しません。 boost :: regexをテストするためのサンプルプログラムを入手できますか?Boost :: Regex(コンソールがフリーズする)の問題

static const boost::regex expression("^[0-9]+"); 
std::string str = "123a1"; 
std::cout << boost::regex_search(str.c_str(), expression); 
+0

このコードはスレッドと何が関係していますか?スレッドを使用していますか? –

+0

はいスレッドを使用していますが、スレッド機能全体が大きすぎて投稿できません。 – Speed

+0

何らかの理由で、メインのすべてをコメントアウトしてboost :: regexサンプルを実行しても、プログラムがブレークします...ブーストには互いに衝突が含まれていますか? boost :: regex、boost :: algorithm :: string、boost :: algorithm :: string :: regex、boost :: thread、boost :: mutex – Speed

答えて

0

私はBoostProからブーストインストールを削除し、コンパイル済みのいくつかの作業は自分自身を高めた後、今はそれが動作します。問題は、BoostProがすべてのDLLをインストールしていないことと、BoostProが間違って指定したDLLが見つからないと思ったときです(boost_regex-vc100-mt-gd-1_47.dllの代わりにboost_regex-vc100-mt-1_47.dll)。正しいDLLを取得した後、すべて正常に動作します。これをトラブルシューティングしていただきありがとうございます!

0

まず最初に行うには、ブーストのバージョンが スレッドをサポートしているかどうかを確認することです。二つ目は、要件の全てが満たされていることを確認することです

#include <iostream> 
#include <boost/regex.hpp> 

int 
main() 
{ 
#ifdef BOOST_HAS_THREADS 
    std::cout << "Boost has threads" << std::endl; 
#else 
    std::cout << "Boost doesn't support threads" << std::endl; 
#endif 
    return 0; 
} 

:次のようなものをコンパイルして実行すると、 ことを伝える必要があります。 が実行されたコンテキストではなく、実際の行を送信しました。最初の行が名前空間のスコープにある場合は、 になる必要があります(ただし、mainを入力する前に、 という静的オブジェクトのコンストラクタでスレッドを開始している場合を除く)。最初の行にブロック スコープがある場合(つまり、関数内にある場合)、 への最初の呼び出しがスレッドが開始される前に発生した場合にのみOKです。 (私が理解から、グラム++と は、あなたが最初の行は、スコープをブロックしている場合でもOKにする必要がありますが、 は私はわからない。)

+0

boostはスレッドをサポートしていますが、アプリケーションで2つのスレッドを使用しています。コードは大きすぎて送信できません。正規表現はスレッド関数内で実行され、正規表現に一致する文字列があるかどうかを調べます。 – Speed

+0

自分のプログラムのスキームを追加しました。 – Speed

+0

正規表現自体にブロックスコープがあります。それを関数から外して、それが何かを変更するかどうかを確認します。 (一般的に、ローカルの静的変数はマルチスレッド環境では機能しません。ほとんどのコンパイラでは、少なくとも。) –