0

何らかの理由でboost::regexがアプリケーションをオーバーロードし、エラーなしでフリーズしますが、正常にコンパイルされます。たとえば、このコードはフラットに失敗します。私は何が間違っているのですか?DLLエラーかどうかを確認するために1.47をブーストするように更新しましたが、それでも機能しません。boost :: regexをテストするためのサンプルプログラムを入手できますか?

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

2 に答える 2

0

最初に行うことは、Boostのバージョンがスレッド化をサポートしているかどうかを確認することです。次のようなものをコンパイルして実行すると、次のことがわかります。

#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;
}

2つ目は、すべての要件が満たされていることを確認することです。実行されたコンテキストではなく、実際の行を投稿しました。最初の行が名前空間スコープにある場合は、OKである必要があります(コンストラクターで静的オブジェクトへのスレッド化を開始していない限り、入力する前にmain:実行しないでください)。最初の行にブロックスコープがある場合(つまり、関数内にある場合)、スレッドが開始する前にこの関数への最初の呼び出しが発生した場合にのみ問題ありません。(私が理解していることから、g​​ ++を使用すると、最初の行にブロックスコープが含まれていても問題ないはずですが、よくわかりません。)

于 2011-08-02T09:11:52.463 に答える
0

いくつかの作業の後、BoostProからブーストインストールを削除し、自分でブーストをコンパイルしました。これで動作します。問題は、BoostProがすべてのDLLをインストールしなかったことであり、不足しているDLLを要求されたときに、BoostProが(boost_regex-vc100-mt-1_47.dllではなくboost_regex-vc100-mt-gd-1_47.dll)間違った名前を付けていると思いました。正しいDLLを取得した後、すべてが正常に機能します。これのトラブルシューティングにご協力いただきありがとうございます。

于 2011-08-02T20:06:24.567 に答える