2013-05-25 2 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, но я не могу воссоздать ошибку (она отлично работает).

Я использую gcc 4.7.2, работающий на Linux.

Документация для std::regex

Спасибо, я очень признателен за любую помощь.

Calle

Update:

Это моя реконструкция, которая работает:

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

Обратите внимание на «явную» часть. – 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); Не то, чтобы это было важно для моего приложения, но избегать двух дополнительных объектов регулярного выражения было бы неплохо. Еще раз спасибо. – user2421206

+0

Действительно ли это вызывает создание копии? Если это так, вы можете построить их отдельно (по одному на строку), а затем создать массив из двух указателей на построенные объекты. Исходная версия не работает, потому что она полагается на неявное преобразование из const char * в regex. – StilesCrisis

+0

Возможно, это не вызов конструктора копирования. Я проверю это. Единственное, что меня беспокоит, это то, что моя «реконструкция» работает. Я отправлю код в виде ответа, если вы хотите посмотреть. – user2421206

Смежные вопросы