2013-05-25 28 views
0

我已經試了一整天,沒有任何運氣...錯誤實例化類型的數組basic_regex

這工作:

std::regex pattern ("Test"); 

這不起作用:

std::regex pattern_array[2] {"Test1", "Test2"}; 

產生錯誤:

mainprog.cpp:534:47: error: could not convert ‘(const char*)"Test1"’ from ‘const char*’ to ‘std::regex {aka std::basic_regex<char>}’ 

mainprog.cpp:534:47: error: could not convert ‘(const char*)"Test2"’ from ‘const char*’ to ‘std::regex {aka std::basic_regex<char>}’ 

我有tr以創建一個與std::regex具有相同結構的類,但我無法重新創建該錯誤(它完美地工作)。

我正在使用運行在Linux上的gcc 4.7.2進行編譯。

std::regex

感謝

文檔,我高度讚賞任何幫助。

卡萊

更新:

這是我改造的作品:

class testclass 
{ 
public: 
    testclass(const char* s, bool b = true); 
}; 

testclass::testclass(const char* s, bool b) 
{ 
    printf("Bool %d", b); 
} 

testclass obj1 ("Test"); 
testclass obj2[2] {"Test1", "Test2"}; 
+0

請注意'explicit'部分。 – chris

+0

已注意到!重新創建「問題」。感謝你們兩位幫助我。 – user2421206

回答

1

試試這個。

std::regex pattern_array[2] = { std::regex("Test1"), std::regex("Test2") }; 

你需要用構造函數顯式地構造,因爲正則表達式類使用上其構造explicit關鍵字。

+0

謝謝,它的工作原理。任何想法爲什麼我的解決方案失敗? 奇怪的是,它適用於單個(非數組)對象。 這是應該匹配的構造函數: 顯式basic_regex(const CharT * s,flag_type f = std :: regex_constants :: ECMAScript); 不是說它對我的應用程序很重要,但避免2個額外的正則表達式對象會很好。 再次感謝。 – user2421206

+0

它真的會造成複製結構嗎?如果是這樣,你可以分別構造它們(每行一個),然後有兩個指向構造對象的指針數組。原始版本失敗,因爲它依賴於從const char *到regex的隱式轉換。 – StilesCrisis

+0

也許它不會調用複製構造函數。我會檢查一下。 那麼困擾我的唯一事情就是我的「重建」工作。如果您想查看,我會發布代碼作爲回覆。 – user2421206