2011-08-02 41 views
0

由於某些原因,boost :: regex重載了我的應用程序,它凍結了一個沒有錯誤,但編譯好的。例如,這個代碼不會一帆風順。我究竟做錯了什麼?我更新以提升1.47以查看它是否是DLL錯誤,但它仍然無效。我可以得到一個示例程序來測試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

由於某種原因,即使我註釋掉了main中的所有內容,並執行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-1_47.dll而不是boost_regex-vc100-mt-gd-1_47.dll)。得到正確的DLL後,一切正常。感謝您排除故障的幫助!

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

的第二件事是驗證所有的要求得到滿足。 您剛剛發佈了實際行,而不是執行它們的上下文 。如果第一行在命名空間範圍內,那麼應該是OK (除非在輸入main之前已經開始將構造函數線程化爲靜態對象, :不這樣做)。如果第一行有 範圍(即在函數中),那麼如果在線程啓動之前第一次調用 這個函數,那麼你只能確定。 (據我所知, 與G ++,你應該是,即使第一行有塊範圍確定,但 我不知道。)

+0

boost支持線程,我在應用程序中使用兩個線程,代碼有點太大而無法發佈。正則表達式在線程函數內執行,以檢查某個字符串是否與正則表達式匹配。 – Speed

+0

我添加了我的程序。 – Speed

+0

所以正則表達式本身具有塊範圍。將它移出函數,看看它是否改變了任何東西。 (一般來說,局部靜態變量在多線程環境下不起作用,至少大多數編譯器)。 –