如何在Builder XE使用boost:regex |
答題得分者是:CA
|
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
各位大大您好
在下最近想在C Builder XE使用boost::regex,但碰到問題,找了很多文章都沒辦法解決。 參考了下列文章 http://blogs.embarcadero.com/davidi/2008/07/21/38911 http://delphi.ktop.com.tw/board.php?cid=168&fid=912&tid=101744 在下的步驟如下: 1.Options設定include 的path,如:C:\Program Files\Embarcadero\RAD Studio\8.0\include\boost_1_39 2.使用如下程式碼: [code cpp] #include #pragma hdrstop #include "Unit1.h" #include #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { String tmpString = L"^\\b(00107800|01199700)\\d{7}\\b"; boost::regex e( tmpString.c_str() ); if( boost::regex_match(Edit1->Text.c_str(),e) ) ShowMessage( L"MATCH!!" ); else ShowMessage( L"Not MATCH!!" ); } [/code] 但卻出現如下的錯誤訊息: [BCC32 Error] Unit1.cpp(19): E2285 Could not find a match for 'boost::regex::basic_regex(wchar_t *)' Full parser context Unit1.cpp(17): parsing: void _fastcall TForm1::Button1Click(TObject *) [BCC32 Error] Unit1.cpp(20): E2285 Could not find a match for 'boost::regex_match 這是因為我include路徑有誤嗎?還是步驟有錯??還是需要另外下載boost_1_45_0來用?? 感謝回覆者。 |
CA
一般會員 發表:1 回覆:10 積分:22 註冊:2007-04-01 發送簡訊給我 |
String 和 Edit1->Text
在 Builder XE 裡面預設對應到的是 UnicodeString 他的 c_str() 回傳的是 wchar_t * 但是 boost::regex 要的是 char * 所以編譯不通過 可以呼叫 UnicodeString::t_str() 傳回一個專案定義的型態 在 Project -> Options 的 Directories and Conditionals 裡面有個 _TCHAR maps to 可以選擇 t_str() 傳回哪種字串 或者也可以把它包成 AnsiString 如下 if( boost::regex_match(AnsiString(Edit1->Text).c_str(),e) ) |
cashyy
高階會員 發表:117 回覆:322 積分:212 註冊:2004-04-30 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |