ошибка компоновщика при использовании tr1 :: regex - PullRequest
2 голосов
/ 19 мая 2010

У меня есть программа, которая использует tr1::regex, и пока она компилируется, она дает мне очень подробные ошибки компоновщика.

Вот мой заголовочный файл MapObject.hpp:

#include <iostream>
#include <string>
#include <tr1/regex>
#include "phBaseObject.hpp"
using std::string;

namespace phObject
{
    class MapObject: public phBaseObject
    {
        private:
            string color;  // must be a hex string represented as "#XXXXXX"
            static const std::tr1::regex colorRX;  // enforces the rule above
        public:
            void setColor(const string&);
        (...)
    };
}

Вот моя реализация:

#include <iostream>
#include <string>
#include <tr1/regex>
#include "MapObject.hpp"
using namespace std;


namespace phObject
{
    const tr1::regex MapObject::colorRX("#[a-fA-F0-9]{6}");

    void MapObject::setColor(const string& c)
    {
        if(tr1::regex_match(c.begin(), c.end(), colorRX))
        {
            color = c;
        }
        else cerr << "Invalid color assignment (" << c << ")" << endl;
     }

     (...)
}

и теперь за ошибки:

max @ max-desktop: ~ / Рабочий стол / Разработка / CppPartyHack / PartyHack / lib $ g ++ -Wall -std = c ++ 0x MapObject.cpp
/tmp/cce5gojG.o: в функции std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::basic_regex(char const*, unsigned int)': MapObject.cpp:(.text._ZNSt3tr111basic_regexIcNS_12regex_traitsIcEEEC1EPKcj[std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::basic_regex(char const*, unsigned int)]+0x61): undefined reference to std :: tr1 :: basic_regex> :: _ M_compile () '
/tmp/cce5gojG.o: В функции bool std::tr1::regex_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char, std::tr1::regex_traits<char> >(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::tr1::basic_regex<char, std::tr1::regex_traits<char> > const&, std::bitset<11u>)':<br> MapObject.cpp:(.text._ZNSt3tr111regex_matchIN9__gnu_cxx17__normal_iteratorIPKcSsEEcNS_12regex_traitsIcEEEEbT_S8_RKNS_11basic_regexIT0_T1_EESt6bitsetILj11EE[bool std::tr1::regex_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char, std::tr1::regex_traits<char> >(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::tr1::basic_regex<char, std::tr1::regex_traits<char> > const&, std::bitset<11u>)]+0x53): undefined reference to bool std :: tr1 :: regex_match <__ gnu_cxx :: __ normal_iterator, std :: allocator>>, std :: allocator, std :: allocator>>>>, char, std :: tr1 :: regex_traits> (__ gnu_cxx :: __ normal_iterator, std :: allocator>>, __gnu_cxx :: __ normal_iterator, std :: allocator>>, std :: tr1 :: match_results <__ gnu_cxx :: __ normal_iterator, std :: allocator> >, std :: allocator, std :: allocator>>>>> &, std :: tr1 :: basic_regex> const &, std :: bitset <11u>) '
collect2: ld вернул 1 статус выхода

Я не могу сделать из этого ни головы, ни хвоста, кроме undefined reference to std::tr1::basic_regex в начале. Кто-нибудь знает, что происходит?

Ответы [ 2 ]

1 голос
/ 19 мая 2010

Поддержка Regex для C ++ 0x является неполной и отсутствовала для TR1, см. Страницу состояния реализации для C ++ 0x / TR1.

Boost предлагает альтернативную TR1 реализацию , а также оригинальную библиотеку , на которой она основана.

0 голосов
/ 05 марта 2013

Ответ таков: хотя заголовок указан, некоторые методы не указаны.

Можно было бы вывести это из ответа Георга, но после обдумывания и кодирования сотен строк или около того, исходя из предположения, что на самом деле была предоставлена ​​изящная библиотека, можно было бы слишком устать для дальнейших выводов.

...